1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > C语言课程设计——学生成绩信息管理系统

C语言课程设计——学生成绩信息管理系统

时间:2020-11-14 17:04:32

相关推荐

C语言课程设计——学生成绩信息管理系统

文章目录

一、导语二、C语言代码三、运行结果图四、注意事项

一、导语

C语言课程设计——学生成绩信息管理系统,完成了学生成绩记录录入与存盘、显示、删除、修改、查找、排序、统计等功能。

通过主菜单的函数调用来实现各个子程序的运行,包括刷新学生信息、查询学生信息、修改学生信息、增加学生信息、删除学生信息、显示当前信息、保存学生信息、读取学生信息等功能,从而完成学生管理系统的完整使用。

开发环境: Dev

二、C语言代码

#include<stdio.h>/*标准函数*/#include<stdlib.h>/*其它说明*/#include<string.h>/*字符串函数*/#define len 15/* 学号和姓名最大字符数,实际请更改*/#define N 50/* 最大学生人数,实际请更改*/#define MAX_LINE 1024 /* 最大打开文件行数*/struct Student {/*学生信息结构体*/int q;char code[len+1];/* 学号*/char name[len+1];/* 姓名*/int age;/* 年龄*/char sex;/* 性别*/char object[len+1]; /* 专业*/char room[len+1];/* 班级*/float score[4];/* 4门课程成绩*/float sum;/* 总分*/float average;/* 平均分*/} stu[N];/*定义结构体数组*/int k=1,n=0, m=0; /* 定义全局变量,n代表当前记录的学生人数,m为新增加的学生人数*//*函数声明*/void seek();//查找信息void modify();//修改信息void insert();//插入信息void del();//删除信息void display();//显示信息void menu(); //显示菜单void save();//保存信息void refresh();//刷新信息void help();//帮助void open(); //调取学生成绩文档int main() {/*主调*/while(k) menu();system("pause");return 0;}void help() {/*帮助*/printf("\n0.欢迎使用系统帮助!\n");printf("\n1.初次进入系统后,请先从文件读入信息,再执行其他操作;若文件不存在或者没有内容,请选择增加学生信息;\n");printf("\n2.按照菜单提示键入数字代号;\n");printf("\n3.增加学生信息后,切记保存;\n");printf("\n4.谢谢您的使用!\n");}void seek() {/*查找*/int i,item,flag;/*item代表选择查询的子菜单编号,flag代表是否查找成功*/char s1[21]; /* 以姓名和学号最长长度+1为准*/printf("------------------\n");printf("-----1.按学号查询-----\n");printf("-----2.按姓名查询-----\n");printf("-----3.退出本菜单-----\n");printf("------------------\n");while(1) {printf("请选择子菜单编号:");scanf("%d",&item);flag=0;switch(item) {case 1:printf("请输入要查询的学生的学号:\n");scanf("%s",s1);for(i=0; i<n; i++)if(strcmp(stu[i].code,s1)==0) {/*strcmp是比较函数*/flag=1;printf("学生学号 学生姓名 年龄 性别 专业 班级 C语言 数学 英语 军理 总成绩 平均分\n");printf("---------------------------------------------------------------------------\n");stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;printf("%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);}if(0==flag) printf("该学号不存在!\n");break;case 2:printf("请输入要查询的学生的姓名:\n");scanf("%s",s1);for(i=0; i<n; i++)if(strcmp(stu[i].name,s1)==0) {flag=1;printf("学生学号 学生姓名 年龄 性别 专业 班级 C语言 数学 英语 军理 总成绩 平均分\n");printf("---------------------------------------------------------------------------\n");stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;printf("%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);}if(0==flag) printf("该姓名不存在!\n");break;case 3:return;default:printf("请在1-3之间选择\n");}}}void modify() {/*修改信息*/int i,item,num=-1;/*item代表选择修改的子菜单编号,num保存要修改信息的学生的序号*/char sex1,s1[len+1],s2[len+1],object1[len+1],room1[len+1]; /* 以姓名和学号最长长度+1为准*/float score1;printf("请输入要修改的学生的学号:\n");scanf("%s",s1);for(i=0; i<n; i++)if(strcmp(stu[i].code,s1)==0) /*比较字符串是否相等*/num=i;/*保存要修改信息的学生的序号*/if(num!=-1) {printf("------------------\n");printf("1.修改姓名\n");printf("2.修改年龄\n");printf("3.修改性别\n");printf("4.修改专业\n");printf("5.修改班级\n");printf("6.修改C语言成绩\n");printf("7.修改高等数学成绩\n");printf("8.修改大学英语成绩\n");printf("9.修改军事理论成绩\n");printf("10.退出本菜单\n");printf("------------------\n");while(1) {printf("请选择子菜单编号:");scanf("%d",&item);switch(item) {case 1:printf("请输入新的姓名:\n");scanf("%s",s2);strcpy(stu[num].name,s2);break;case 2:printf("请输入新的年龄:\n");scanf("%d",stu[num].age);break;case 3:printf("请输入新的性别(男:1,女:2):\n");scanf("%c",&sex1);stu[num].sex=sex1;break;case 4:printf("请输入新的专业:\n");scanf("%s",object1);strcpy(stu[num].object,object1);break;case 5:printf("请输入新的班级:\n");scanf("%s",room1);strcpy(stu[num].room,room1);break;case 6:printf("请输入新的C语言成绩:\n");scanf("%f",&score1);stu[num].score[0]=score1;break;case 7:printf("请输入新的高等数学成绩:\n");scanf("%f",&score1);stu[num].score[1]=score1;break;case 8:printf("请输入新的大学英语成绩:\n");scanf("%f",&score1);stu[num].score[2]=score1;break;case 9:printf("请输入新的军事理论成绩:\n");scanf("%f",&score1);stu[num].score[2]=score1;break;case 10:return;default:printf("请在1-10之间选择\n");}}}printf("修改完毕!显示结果请选择菜单6,并请及时保存!\n");system("pause");}void sort() {/*按学号排序*/int i,j,k,*p,*q,s;char temp[len+1],ctemp;float ftemp;for(i=0; i<n-1; i++) {for(j=n-1; j>i; j--)//冒泡法排序if(strcmp(stu[j-1].code,stu[j].code)>0) {strcpy(temp,stu[j-1].code); // strcpy函数strcpy(stu[j-1].code,stu[j].code);strcpy(stu[j].code,temp);strcpy(temp,stu[j-1].name);strcpy(stu[j-1].name,stu[j].name);strcpy(stu[j].name,temp);ctemp=stu[j-1].sex;stu[j-1].sex=stu[j].sex;stu[j].sex=ctemp;p=&stu[j-1].age;q=&stu[j].age;s=*q;*q=*p;*p=s;for(k=0; k<4; k++) {ftemp=stu[j-1].score[k];stu[j-1].score[k]=stu[j].score[k];stu[j].score[k]=ftemp;}}}}void insert() {/*插入函数*/int i=n,j,flag;//n为现有学生人数printf("请输入待增加的学生数:\n");scanf("%d",&m);if(m>0) {do {flag=1;while(flag) {flag=0;printf("请输入第%d位学生的学号:\n",i+1);scanf("%s",&stu[i].code);for(j=0; j<i; j++)/*与之前已有学号比较,如果重复,则置flag为0,重新进入循环体内输入*/if(strcmp(stu[i].code,stu[j].code)==0) {printf("已有该学号,请检查后重新输入!\n");flag=1;break;/*如有重复立即退出该层循环,提高判断速度*/}}printf("请输入第 %d 个学生的学号:\n",i+1);scanf("%s",stu[i].code);printf("请输入第 %d 个学生的姓名:\n",i+1);scanf("%s",stu[i].name);printf("请输入第 %d 个学生的年龄:\n",i+1);scanf("%d",&stu[i].age);printf("请输入第 %d 个学生的性别(男:1,女:2):\n",i+1);scanf(" %c",&stu[i].sex);printf("请输入第 %d 个学生的专业:\n",i+1);scanf(" %s",&stu[i].object);printf("请输入第 %d 个学生的班级:\n",i+1);scanf(" %s",&stu[i].room);printf("请输入第 %d 个学生的C语言成绩\n",i+1);scanf("%f",&stu[i].score[0]);printf("请输入第 %d 个学生的高等数学成绩:\n",i+1);scanf("%f",&stu[i].score[1]);printf("请输入第 %d 个学生的大学英语成绩:\n",i+1);scanf("%f",&stu[i].score[2]);printf("请输入第 %d 个学生的军事理论成绩:\n",i+1);scanf("%f",&stu[i].score[3]);if(flag==0)i++;/*与之前已有学生学号无重复,学生人数加1*/} while(i<n+m);}n+=m;printf("信息增加完毕!\n\n");sort();system("pause");}void del() {/*删除信息*/int i,j,flag=0;//flag为查找成功标志,0表示查找失败,1表示查找成功char s1[len+1];printf("请输入要删除学生的学号:\n");scanf("%s",s1);for(i=0; i<n; i++)if(strcmp(stu[i].code,s1)==0) {//找到要删除的学生记录flag=1;for(j=i; j<n-1; j++)//后面的学生记录向前移动stu[j]=stu[j+1];}if(flag==0) printf("该学号不存在!\n");/*查找失败*/if(flag==1) {printf("删除成功,显示结果请选择菜单\n");n--;//删除成功后,学生人数减1}system("pause");}void display() {/* 输出学生信息*/int i;printf("共有%d位学生的信息:\n",n);if(0!=n) {printf("学生学号 学生姓名 年龄 性别 专业 班级 C语言 数学 英语 军理 总成绩 平均分\n");printf("-------------------------------------------------------------------\n");for(i=0; i<n; i++) {stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;printf("%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);}}system("pause");}void menu() {/* 界面*/int num;printf(" \n\n\n\n");printf(" ****************************************************** \n\n");printf(" *学生信息管理系统*\n \n");printf(" ****************************************************** \n\n");printf("*********************系统功能菜单************************* \n");printf("---------------------- ---------------------- \n");printf("********************************************* \n");printf("* 0.系统帮助及说明 * * 1.刷新学生信息 * \n");printf("********************************************* \n");printf("* 2.查询学生信息 * * 3.修改学生信息 * \n");printf("********************************************* \n");printf("* 4.增加学生信息 * * 5.按学号删除信息 * \n");printf("********************************************* \n");printf("* 6.显示当前信息 * * 7.保存当前学生信息*\n");printf("********************************************* \n");printf("* 8.退出系统 * * 9.调取学生成绩文档*\n");printf("********************************************* \n");printf("---------------------- ---------------------- \n");printf("***********************欢迎使用*************************** \n");printf("请选择菜单编号:");scanf("%d",&num);switch(num) {case 0:help();break;case 1:refresh();break;case 2:seek();break;case 3:modify();break;case 4:insert();break;case 5:del();break;case 6:display();break;case 7:save();break;case 8:k=0;break;case 9:open();break;default:printf("请在0-9之间选择\n");}}void save() {/*保存文件*/FILE *fp;//文件指针int i;fp=fopen("E:\\12971.txt","a");/*以只在文件末尾写的方式打开文件*/for(i=0; i<n; i++) {stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;fprintf(fp,"%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);}fclose(fp);printf("已完成保存!");system("pause");}void refresh() {/*更新文件*/FILE *fp;//文件指针int i,a;printf("请输入需要刷新的学生个数:");scanf("%d",&a);fp=fopen("E:\\12971.txt","r");//以只读方式打开文件for(i=0; i<a; i++) {stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;fscanf(fp,"%s %s %d %c %f %f %f %f %f %f\n",&stu[i].code,&stu[i].name,&stu[i].age,&stu[i].sex,&stu[i].object,&stu[i].room,&stu[i].score[0],&stu[i].score[1],&stu[i].score[2],&stu[i].score[3],&stu[i].sum,&stu[i].average);}fclose(fp);printf("学生学号 学生姓名 年龄 性别 专业 班级 C语言 数学 英语 军理 总成绩 平均分\n");for(i=0; i<a; i++) {stu[i].sum=stu[i].score[0]+stu[i].score[1]+stu[i].score[2]+stu[i].score[3];stu[i].average=stu[i].sum/4.0;printf("%6s%8s%6d%5c%6s%5s%6.1f%6.1f%6.1f%6.1f%6.1f%6.1f\n",stu[i].code,stu[i].name,stu[i].age,stu[i].sex,stu[i].object,stu[i].room,stu[i].score[0],stu[i].score[1],stu[i].score[2],stu[i].score[3],stu[i].sum,stu[i].average);}system("pause");}void open() {/*打开文件*/char buf[MAX_LINE]; /*缓冲区*/FILE *fp; /*文件指针*/int lengh; /*行字符个数*/if((fp = fopen("E:\\12971.txt","r")) == NULL) {perror("fail to read");exit (1) ;}while(fgets(buf,MAX_LINE,fp) != NULL) {lengh = strlen(buf);buf[lengh-1] = '\0'; /*去掉换行符*/printf("%s \n",buf);}return;}

txt文件

学生学号 学生姓名 年龄 性别 专业 班级 C语言 数学 英语 军理 总成绩 平均分---------------------------------------------------------------------------1912969 张三 18 1 物联 192 75.0 65.0 92.0 96.0 328.0 82.01912970 李四 18 1 物联 192 85.0 65.0 77.0 68.0 295.0 73.81912971 王五 19 1 物联 192 95.0 69.0 86.0 100.0 350.0 87.51912972 杜兰特 18 1 物联 192 75.0 86.0 92.0 96.0 328.0 82.51912973 哈登 18 1 物联 192 45.0 65.0 77.0 68.0 295.0 80.01912974 欧文 19 1 物联 192 95.0 84.0 86.0 86.0 350.0 89.5

三、运行结果图

1、主菜单界面

2、增加学生信息

3、调取文档

四、注意事项

1、调取12971.txt文档需要根据自己文档的位置,在上述代码修改(共3处),代码解释在注释里。

2、txt文件

链接:/izrPaUwX

密码:qxehau

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。