学生籍贯管理系统(C语言课程设计)

 该门课程成绩我的为优秀,仅供参考。

bf417b02edcc4dfbbce4bdd70d6b74be.png

 

目录

 

课程设计要求

所有代码:

下面对代码中每个函数进行简要解释:

系统预览:


 

课程设计要求

  1. 求指数n<30的所有梅森素数并输出
  2. 选美比赛排名
  3. 学生籍贯管理系统

所有代码:


#include<cstdio>
#include<cstring>
#include<math.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
# define M 30 
//梅森素数
// 判断一个数是否为素数
int isPrime(int n) {
    if (n <= 1) return 0;
    int i;
    for (i = 2; i <= sqrt(n); i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

// 求指数n<30的所有梅森素数并输出
void findMersennePrimes() {
    int n, i, t = 2, count = 0;
    printf("指数n<30的所有梅森素数:\n");
    for (n = 2; n < 30; n++) {
        t = pow(2, n) - 1;  // 求t=2的n次方-1
        if (isPrime(t)) {  // 判断t是否为素数
            printf("%-10d ", t);  // 输出结果
            count++;
            if (count % 5 == 0) {  // 每行输出5个梅森素数
                printf("\n");
            }
        }
    }
    printf("\n");
    printf("您已经完成了指数n<30的所有梅森素数的求取,祝您工作顺利!"); 
}

//选美比赛

void xuanmei()
{
    int j,n,i;
	int a[10001],book[10000],b[10001],c[10000];//定义存储选手序号、选手得分、选手名次的数组
	printf("请输入选手数量:");
	scanf("%d",&n);//输入选手数量
	printf("请依次输入选手序号(用空格隔开):");
	for(i=0;i<n;i++)//输入选手序号
	{
		scanf("%d",&c[i]);
	}
	printf("请依次输入选手得分(用空格隔开):");
    for(i=0;i<n;i++)//输入选手得分
	{
		scanf("%d",&a[i]);
    }
    for(i=0;i<n;i++)//排序
	{
        int count=1;
        memset(book,0,sizeof(book));
        for(j=0;j<n;j++)
		{
            if(a[j]>a[i]&&book[a[j]]==0)
			{
                book[a[j]]=1;
                count++;
            }
        }
        b[i]=count;
    }
	printf("各位选手的名次如下:");
    for(i=0;i<n;i++)//输出选手名次
	{
        if(i==0)
            printf("%d",b[i]);
        else
            printf(" %d",b[i]);
    }
	printf("\n");
	printf("您已经完成了选美比赛成员的排名工作,祝您工作顺利!");
}


//学生籍贯管理系统
//定义一个学生结构体
typedef struct student//定义储存学生信息的结构体
{
    char no[12];            //学号
    char name[40];          //姓名
    char tele[20];          //电话号码
    int D[18];              //身份证号码
    char jg[60];            //籍贯
    char addr[80];          //通讯地址
    struct student* next;   //指向下一节点的指针
}STU;//后面可用STU定义变量或数组存放学生信息

//函数声明放在这里
STU* LIstInit(STU* L);//创建表头,初始化链表
STU* ListCreate(STU* L, int n);//创建链表,将新生成的节点插入到链表的表头
void ListInsert(STU* L);//插入学生的相关信息的函数
void ListDelete(STU* L, char n[40]);//删除某个学生的信息的函数
void LIstSearch(STU* L, char n[]);//查找学生的相关信息的函数
void input(STU* p, int i);//录入某个学生的信息的函数
void output(STU* L);//输出学生信息的函数
void menu1();//主菜单函数
void menu2();//学生籍贯管理系统菜单函数 
//创建表头,初始化链表
STU* LIstInit(STU* L)
{
    STU* head = NULL;
    head = (STU*)malloc(sizeof(STU));
    head->next = NULL;
    L = head;
    return L;
}

//创建链表,将新生成的节点插入到链表的表头
STU* ListCreate(STU* L, int n)
{
    int i;
    for (i = 0; i < n; i++)
    {
        STU* p;
        //将新生成的节点插入到链表中
        p = NULL;
        p = (STU*)malloc(sizeof(STU));
        input(p, i);
        p->next = L->next;
        L->next = p;
    }
    return L;
}

//对链表进行节点的插入操作
void ListInsert(STU* L)//插入学生的相关信息的函数
{
    STU* s = NULL;
    //生成一个新节点s
    s = (STU*)malloc(sizeof(STU));
    printf("请输入您要插入的学生的学号:");
    scanf("%s", &s->no);
    printf("请输入您要插入的学生的姓名:");
    scanf("%s", &s->name);
    printf("请输入您要插入的学生的电话号码:");
    scanf("%s", &s->tele);
    printf("请输入您要插入的学生的身份证号码:");
    scanf("%s", &s->D);
    printf("请输入您要插入的学生的籍贯:");
    scanf("%s", &s->jg);
    printf("请输入您要插入的学生的通讯地址:");
    scanf("%s", &s->addr);
    s->next = L->next;
    L->next = s;
    printf("插入成功!");
}

//对链表的进行节点的删除操作
void ListDelete(STU* L, char n[])//删除某个学生的信息的函数
{
    STU* p = L->next, * pre = L;  //定义p指针指向头节点的指向,定义pre指向头节点,pre始终指向p的前驱节点
    if (p == NULL)
        printf("数据为空,无法删除!");
    else
    {
        while (strcmp(p->name, n) != 0)
        {
            pre = p;
            p = pre->next;
            if (p == NULL)
            {
                printf("没有找到相关信息,无法删除\n");//判断文件是否存在,是否删除成功
                return;
            }
        }
        pre->next = p->next;
        free(p);
        printf("删除成功");
    }
}

void LIstSearch(STU* L, char n[])//查找某个学生的信息的函数
{
    STU* p = L->next;
    if (p == NULL)
        printf("数据为空,无法查找!");
    else
    {
        while (strcmp(p->name, n) != 0)
        {
            p = p->next;
            if (p == NULL)
            {
                printf("没有找到相关信息\n");//判断文件是否存在,是否查找成功
                return;
            }
        }
        printf("该学生的籍贯为:\n");
        printf("\t%s\n", p->jg);
    }
}

void ListModify(STU* L, char na[])//修改某个学生的信息的函数
{
    char JG[60];
    STU* p = L->next;
    while (p != NULL)
    {
        if (strcmp(p->name, na) == 0)
        {
            printf("请选择您修改后的学生籍贯:\n");
            scanf("%s", &JG);
            strcpy(p->jg, JG);
            break;
        }
        p = p->next;
    }
}

void input(STU* p, int i)//录入学生信息的函数
{
    printf("请输入第%d名学生的学号:", i + 1);
    scanf("%s", &p->no);
    printf("请输入第%d名学生的姓名:", i + 1);
    scanf("%s", &p->name);
    printf("请输入第%d名学生的电话号码:", i + 1);
    scanf("%s", &p->tele);
    printf("请输入第%d名学生的身份证号码:", i + 1);
    scanf("%s", &p->D);
    printf("请输入第%d名学生的籍贯:", i + 1);
    scanf("%s", &p->jg);
    printf("请输入第%d名学生的通讯地址:", i + 1);
    scanf("%s", &p->addr);
}

void output(STU* L)//输出函数
{
    STU* p = L->next;
    while (p != NULL)
    {
        printf("%s\t", p->no);
        printf("%s\t", p->name);
        printf("\t%s", p->tele);
        printf("\t\t%s", p->D);
        printf("\t%s", p->jg);
        printf("\t%s", p->addr);
        printf("\n");
        p = p->next;
    }
}

void PrintFile(STU* L)//保存学生信息的函数
{
    STU* p = L->next;
    FILE* fp;
    fp = fopen("student.txt", "w");
    fprintf(fp, "学号\t\t姓名\t\t电话号码\t\t身份证号码\t\t籍贯\t\t通讯地址\n");
    while (p != NULL)
    {
        fprintf(fp, "%s\t", p->no);
        fprintf(fp, "%s\t", p->name);
        fprintf(fp, "\t%s", p->tele);
        fprintf(fp, "\t%s", p->D);
        fprintf(fp, "\t%s", p->jg);
        fprintf(fp, "\t\t%s", p->addr);
        fprintf(fp, "\n");
        p = p->next;
    }
    printf("保存成功,请到当前目录下的student.txt文件中查看");
    fclose(fp);
}

void menu1()//菜单函数
{
    printf("\n\n");
    printf("\t\t\t*******************C语言课程设计***********************\n");
    printf("\t\t\t* 作者:魏永雷  班级:数据科学221  学号:3220706134      *\n");
    printf("\t\t\t*                                                     *\n");
    printf("\t\t\t*          <1>. 求指数n<30的梅森素数                  *\n");
    printf("\t\t\t*          <2>. 选美比赛排名                          *\n");
    printf("\t\t\t*          <3>. 学生籍贯管理系统                      *\n");
    printf("\t\t\t*          <0>. 退出系统                              *\n");
    printf("\t\t\t*                                    欢迎使用本系统!  *\n");
    printf("\t\t\t*******************************************************\n");
    printf("\t\t\t输入选项,按回车进入选项:                              \n");
}

void menu2()//菜单函数
{
    printf("\n\n");
    printf("\t\t\t*******************学生籍贯管理系统********************\n");
    printf("\t\t\t* 作者:魏永雷  班级:数据科学221  学号:3220706134      *\n");
    printf("\t\t\t*                                                     *\n");
    printf("\t\t\t*          <1>. 录入学生的相关信息                    *\n");
    printf("\t\t\t*          <2>. 查看全部学生的相关信息                *\n");
    printf("\t\t\t*          <3>. 查找某个学生的籍贯                    *\n");
    printf("\t\t\t*          <4>. 修改某个学生的籍贯                    *\n");
    printf("\t\t\t*          <5>. 删除某个学生的相关信息                *\n");
    printf("\t\t\t*          <6>. 插入某个学生的相关信息                *\n");
    printf("\t\t\t*          <7>. 保存学生信息                          *\n");
    printf("\t\t\t*          <0>. 退出管理系统                          *\n");
    printf("\t\t\t*                                    欢迎使用本系统!  *\n");
    printf("\t\t\t*******************************************************\n");
    printf("\t\t\t输入选项,按回车进入选项:                              \n");
}

int main()
{
    int item, n;         //item用于接收菜单输入的命令,n用于接收输入的学生人数
    char nam[30];
    STU* L = NULL;
    L = LIstInit(L);
    do
    {
        menu1();
        printf("请输入相应的数字,进行相应的操作:\n");
        scanf("%d", &item);
        switch (item)//switch语句编写菜单选项
        {
        case 1:
            findMersennePrimes(); // 求指数n<30的所有梅森素数并输出
            break;
        case 2:
            xuanmei();
            break;
        case 3:
            do
		    {
		        menu2();
		        printf("请输入相应的数字,进行相应的操作:\n");
		        scanf("%d", &item);
		        switch (item)//switch语句编写菜单选项
		        {
		        case 1:
		            printf("请输入您要录入的学生人数:");
		            scanf("%d", &n);
		            L = ListCreate(L, n);
		            break;
		        case 2:
		            printf("全部学生信息如下:\n");
		            printf("学号\t\t姓名\t\t电话号码\t\t身份证号码\t\t籍贯\t\t通讯地址\n");
		            output(L);
		            break;
		        case 3:
		            printf("请输入您要查找的学生姓名:");
		            scanf("%s", nam);
		            LIstSearch(L, nam);
		            break;
		        case 4:
		            printf("请输入您要修改的学生姓名:");
		            scanf("%s", nam);
		            ListModify(L, nam);
		            break;
		        case 5:
		            printf("请输入您要删除的学生的姓名:");
		            scanf("%s", nam);
		            ListDelete(L, nam);
		            break;
		        case 6:
		            ListInsert(L);
		            break;
		        case 7:
		            PrintFile(L);
		            break;
		        case 0:
		        	printf("您已经完成了学生籍贯管理系统的工作,祝您工作顺利!");
		            printf("即将退出学生籍贯管理系统.....");
		            printf("下班啦,嘿嘿嘿!"); 
		            exit(0);
		        default:
		        	printf("输入格式错误,请重新输入"); 
		            break;
		        }
		        printf("\n\n\n\n");
		    } while (item);
        case 0:
            printf("即将退出本系统.....");
            exit(0);
        default:
        	printf("输入格式错误,请重新输入"); 
            break;
        }
        printf("\n\n\n\n");
    } while (item);
    return 0;
}

下面对代码中每个函数进行简要解释:

isPrime函数:用于判断一个数是否为素数,返回值为1表示是素数,返回0表示不是素数。

findMersennePrimes函数:该函数用于计算2的n次方-1(n<30)得到的梅森素数,并输出结果。在此过程中,调用了isPrime函数进行素数判断。

xuanmei函数:该函数用于进行选美比赛的排名,输入选手数量、选手序号、以及每个选手的得分,根据得分进行排名并输出。

结构体定义:定义了一个学生结构体,包含学生的各种信息,如学号、姓名、电话、身份证、籍贯、通讯地址,同时还包含一个指向下一节点的指针。

LIstInit函数:用于创建表头并初始化链表。

ListCreate函数:用于创建链表,并将生成的新节点插入到链表的表头。

input函数:录入某个学生的信息,包括学号、姓名、电话、身份证、籍贯、通讯地址。

output函数:输出所有学生的信息,按照学号、姓名、电话、身份证、籍贯、通讯地址的顺序进行输出。

ListInsert函数:用于插入一个新的学生节点,包括录入学生的各个信息

 

系统预览:

5be1773998574e668b82350b9945e27f.png

 

 

032bd82f6f27460a80848c68b22484d1.png

 8531a7b39a5e4eaa8fd7922262fe63d5.png

f930fe55d4ab43af9058950465b56060.png

50b1ace4afef4c0d9c2fe30261dc3895.png

 

3a9ac73ba523407f975f2edaee099572.png

 fad597b1964a497389a95dd67926eae0.png

82d770f48c9e44fab62fe5220d3ca814.png

40a82f1f34fd4e43965fe5f6f5686423.png

212021102cb84ded9c2f8d7d23886fab.png

 

5eb78e5059204341994b52f2cc13dfc4.png

f7cbcdd147f14da7b0f4f5618805ef33.png

849dd472b2da443ea2ccb93d6aeee43b.png

dff60b4d1d444500bd561d0efcba1695.png

加油

 

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AAA阿魏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值