学生成绩信息管理系统C代码.docx

上传人:小飞机 文档编号:3424922 上传时间:2023-03-13 格式:DOCX 页数:21 大小:43.34KB
返回 下载 相关 举报
学生成绩信息管理系统C代码.docx_第1页
第1页 / 共21页
学生成绩信息管理系统C代码.docx_第2页
第2页 / 共21页
学生成绩信息管理系统C代码.docx_第3页
第3页 / 共21页
学生成绩信息管理系统C代码.docx_第4页
第4页 / 共21页
学生成绩信息管理系统C代码.docx_第5页
第5页 / 共21页
亲,该文档总共21页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

《学生成绩信息管理系统C代码.docx》由会员分享,可在线阅读,更多相关《学生成绩信息管理系统C代码.docx(21页珍藏版)》请在三一办公上搜索。

1、学生成绩信息管理系统C代码学员信息管理系统 一、软件需求分校 1、任务描述 随着学校规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长,学生信息管理工作变得更加复杂,需要规范的学生信息管理系统来提高工作效率。 2、功能模块 图1 3、功能演示 3.1、启动软件,进入程序主界面 图2 按屏幕提示“按任意键初始化学员信息”: 图3 “按任意键进入主目录”: 图4 3.2、键入“1”,选择“显示”命令,可以显示所有学生信息: 图5 3.3、返回主目录“图4”,键入“2”,选择“查找”命令,查找指定学号的信息: : 图6 3.4、返回主目录“图4”,键入“3”,选择“录入”命令,录入新的学

2、员信息: : 图7 3.5、返回主目录“图4”,键入“4”,选择“修改”命令,可修改学员信息: : 图8 3.6、返回主目录“图4”,键入“5”,选择“删除”命令,可删除指定学员信息: : 图9 图 10 3.7、返回主目录“图4”,键入“6”,选择“排序”命令,可按学号排序: : 图11 图12 二、程序设计 1、界面设计 1.1、在软件开发中,程序界面有两种,如图13所示: 图13 第一种界面:提示用户如何操作,指令如下: printf(欢迎进入= = = = = = = =学员信息管理系统= = = = = = = =n); printf(nttt按任意键初始化学员信息.nn); 第二种

3、界面:返回程序运算的结果,会在后面“算法”中介绍。 1.2、如何实现主目录界面? system(cls); /清下屏 printf(以下是程序主目录,请选择功能nn); printf(1)显示n2)查找n3)录入n4)修改n5)删除n6)排序n0)退出nn); printf(键入功能前的数字后,按Enter键:); 图14 1.3、如何实现“键入功能前的数字后”,就能选择相应的命令? do select=getchar; switch(select) case 1: display; break; /显示所有学员信息 case 2: query; break; /查询学员信息 case 3:

4、input; break; /录入新学员信息 case 4: update; break; /修改学员信息 case 5: del; break; /删除学员信息 case 6: sort; break; /对学员进行排序 case 0: break; /退出 default:printf(请选择功能前的数字n);break; while(select!=0); /说明:“select=getchar”中,select代表输入的数字字符;/用switch-case语句实现选择对应的命令;/“display( )”函数实现“显示所有学员信息”; 返回程序运算的结果 提示用户如何操作。 1.4、如

5、何实现“按任意键回到主目录”? printf(nnttt按任意键进入主目录.); getch( ); /从键盘接收任一个字符即返回,该函数在conio.h中 1.5、如何实现图15中“输出格式化”? 图15 printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); printf(%-8s%-10s%-10s%-10s%-10sn, = = = =,= = = =,= = = =,= = ,= =); printf(%-8s%-10s%-10.1f %-10.1f %-10.1f,“001”,“Li1”,68,87,63); printf(%-8s%-

6、10s%-10.1f %-10.1f %-10.1f,“001”,“Li2”,68,78,74); 在在printf中,“-”表示数据左对齐,“10.1”中的10表示输出宽度,“.1”表示输出1位小数。 2、数据结构的设计 2.1、如何表示学生信息的数据类型 在本项目中,学生信息包括“学号、姓名、三门课的成绩”可以用结构体数据类型来表示: typedef struct /定义学生信息结构体类型 char no10; /学号 char name16; /姓名 float score3; /定义成绩数组 STU; 2.2、关于头文件包含 在项目中用到了很多库函数,因此在程序起始位置,需要用到文件包

7、含: #include stdio.h #include stdlib.h #include string.h #include conio.h 2.3、关于“全局变量” 由于程序中用到大量的函数,因此可以设置全局变量。 int scount; /定义数据库实际学生数量 STU stu10000; /声明代表学生的结构体数组,假设最多有10000条数据 2.4、关于“函数声明” 程序中用到大量的自定义函数,它们可能是主调函数,也可能是被调函数,为了扩展它们的作用域,最好在程序前面加上函数声明。 /函数声明部分 void readdb( ); /初始化学员信息,把外存中学生数据读入到内存中 vo

8、id savedb( ); /把内存中结构体数组中的学生数据保存到外存中 void zhumulu( ); /显示程序主目录 void display( ); /显示所有学员信息 void input( ); /录入新学员信息 int find(char str80);/查找指定学号的学员,若找到返回该学员在数组中的下标,若没找到返回-1,str代表指定学号;在多个模块中用到该函数 void query( ); /根据学号查找,并显示学员信息 void update( ); /修改学员信息 void del( ); /删除学员信息 void sort( ); /对学员进行排序 2.5、关于“数

9、据文件” 图16 上面显示的是所有学生信息,这些学生数据在内存中的表现形式是常量、变量、数组和链表的方式,在外存中的表现形式是文件。由于断电后,内存信息会全部清空,因此,内存信息需要经常存放到外存中。 2.5.1、文件操作的步骤 打开文件:fopen 对文件读写操作:fscanf、fprintf 关闭文件:fclose 2.5.2、从外存文件中读数据至内存数组stu FILE *fp=fopen(studb.txt,r); i=0; /i是数据库中实际学生数量,其全局变量scount while(!feof(fp) /stu是代表学生的结构体数组 fscanf(fp,%s %s %f %f %

10、f, stui.no , stui.name, /no学号,name姓名 &stui.score0, &stui.score1,&stui.score2); i+; /score是三门课成绩的数组 scount=i;fclose(fp); /feof(fp)有两个返回值:如果遇到文件结束,函数feof的值为1,否则为0。EOF是文件结束标志的文件。在文本文件中,数据是以字符的ASC代码值的形式存放,ASC代码的范围是0到255,不可能出现-1,因此可以用EOF作为文件结束标志。当把数据以二进制形式存放到文件中时,就会有-1值的出现,因此不能采用EOF作为二进制文件的结束标志。为解决这一个问题,

11、ASCI C提供一个feof函数,用来判断文件是否结束。feof函数既可用以判断二进制文件又可用以判断文本文件。即使文件是空的,也要再读一次,feof函数值才会变为真。 因为只有读出所有的数据之后,再读一次,函数feof(fp)的返回值才为真。 2.5.3、把内存数组中数据输出到外存文件 FILE *fp=fopen(“studb.txt”,“w”); i=0; For(i=0;iscount;i+) fprintf(fp,%-8s%-10s%-10.1f%-10.1f%-10.1fn stui.no , stui.name, stui.score0, stui.score1,stui.sco

12、re2); /”%-10.1f”中,“-”左对齐,“10”宽度,“.1”小数位数 fclose(fp); 3、主要算法的实现 3.1、显示所有学员的信息 方法:遍历数组,用printf函数显示数据。 for(i=0;iscount;i+) printf(“%-8s%-10s%-10.1f%-10.1f%-10.1fn”, 图17 stui.no , stui.name, stui.score0,stui.score1,stui.score2); 其中,scount是“实际学生数量”;stu“代表学生信息的结构体数组”,no“学号”,name“姓名”,score“三门课成绩的数组”。 3.2、查

13、找指定学号 方法:遍历数组,查找指定学号的学员,函数返回值是找到后的学号的下标,如果指定学号不存在,返回-1 ; int find(char str80) /str代表要查找的学号 int i; for(i=0;iscount;i+) /scount代表实际的学生数量 if(strcmp(str,stui.no)=0) return i; / stu是表示学生信息的结构体数组名 return -1; 3.3、插入新的学员信息 图18 方法:依次输入新学员信息,并赋值给新变量s;把s添加到数组中;把内存数据保存至外存。 void input( )/录入新学员信息 STU s;/代表新学员信息 /

14、下面输入新学员信息 printf(nnn请输入学号,学号不允许为空字符串:); scanf(%s,&s.no); printf(n请输入姓名,注意姓名里不能加空格:); scanf(%s,&s.name); printf(n请输入语文成绩:); scanf(%f,&s.score0 ); printf(n请输入数学成绩:); scanf(%f,&s.score1 ); printf(n请输入英语成绩:); scanf(%f,&s.score2 ); /把s添加到结构体数组中;同时把表示学员数量的变量scount增加1 stuscount+=s; savedb( );/savedb函数把内存中结

15、构体数组中的学生数据保存到外存中 3)查找到指定学员的数组下标n;输入修改后的学员信息,存贮到临时变量s中;把s临时变量赋值给stun,即stun=s;保存数据到外存文件。 void update( ) /修改学员信息 int n;char str80;STU s;/s作为临时变量,临时存放修改后的学生信息 printf(n请输入要修改的学生的学号:); scanf(%s,str); n=find(str); /find函数返回要查找的学号的下标 printf(nnn请输入修改后的学号,学号不允许为空字符串:); scanf(%s,&s.no); printf(n请输入修改后的姓名,注意姓名里

16、不能加空格:); scanf(%s,&s.name); printf(n请输入修改后的语文成绩:); scanf(%f,&s.score0 ); printf(n请输入修改后的数学成绩:); scanf(%f,&s.score1 ); printf(n请输入修改后的英语成绩:); scanf(%f,&s.score2 ); stun=s;/把修改后的值保存到内存数组中 savedb;/把内存数据保存到外存数据文件中 3.5、删除某学员信息 方法:查找到指定学员的数组下标n;把后续数据前移,实现删除操作;保存数据到外存文件。 void del( )/删除学员信息 int n,i;char str

17、80;char ch; printf(n请输入要删除的学生的学号:); scanf(%s,str); n=find(str); for(i=n;i=scount-2;i+) stui=stui+1;/删除指定学号 scount-; savedb;/把内存数据保存到外存数据文件中 3.6、对学员排序 下面是升序排序: for (i=0;i=scount-2;i+) for(j=i+1;j0) t=stui;stui=stuj;stuj=t; STU; STU stu10000; /声明结构体数组,假设最多10000条信息 /函数声明部分 void readdb; /初始化学员信息,把外存中学生数

18、据读入到内存中 void savedb; /把内存中结构体数组中的学生数据保存到外存中 void zhumulu; /显示程序主目录 void display; /显示所有学员信息 void input; /录入新学员信息 int find(char str80);/查找指定学号的学员,找到返回该学员在数组中的下标,没找到返回-1,str代表指定学号;在多个模块中用到该函数 void query; /根据学号查找,并显示学员信息 void update; /修改学员信息 void del; /删除学员信息 void sort; /对学员进行排序 /函数定义 void main /显示和返回到程

19、序主目录 void zhumulu char select;/代表用户所选择的子目录号 do system(cls); printf(=学员信息管理系统=nn); printf(以下是程序主目录,请选择功能nn); printf(1)显示n2)查找n3)录入n4)修改n5)删除n6)排序n0)退出nn); /程序进入“欢迎界面” printf(nnnnntt欢迎进入=学员信息管理系统=n); /按任意键初始化学员信息 printf(nttt按任意键初始化学员信息.nn); getch; /从键盘收任一个字符即返回,该函数在conio.h中 readdb;/初始化学员信息,把外存中学生数据读入到

20、内存中 printf(ttt共有 %d 条学员信息,scount);/scount是实际学生数量 printf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 zhumulu;/调出“程序主目录” printf(键入功能前的数字后,按Enter键:); switch(select) case 1: /显示所有学员信息 system(cls); display; /显示完毕,提示用户返回主程序 select=getchar; printf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中

21、 break; /查询学员信息 case 2:query; break; case 3:input; break; /录入新学员信息 case 4:update; break; /修改学员信息 case 5:del; break; / 删除学员信息 case 6:sort; break; /对学员进行排序 case 0: break; /退出 default:printf(请选择功能前的数字n);break; while(select!=0); void readdb/初始化学员信息,把外存中学生数据读入到内存中 FILE *fp; if(fp=fopen(studb.txt,r)=NULL)

22、 printf(文件有错误!程序不能运行!n); return; scount=0;/scount是数据库中实际学生数量,是全局变量 while(!feof(fp) /no是学号,name是姓名,score是成绩 /stu是学生结构体数组,全局变量 fscanf(fp,%s %s %f %f %f,stuscount.no,stuscount.name, &stuscount.score0,&stuscount.score1,&stuscount.score2); if(strcmp(stuscount.no,)!=0) scount+; /去掉学号为空字符串 fclose(fp); /把内存

23、中结构体数组中的学生数据保存到外存中 void savedb int i; FILE *fp; if(fp=fopen(studb.txt,w)=NULL)/以写的方式打开文件,覆盖原文件 printf(文件有错误!程序不能运行!n); return; /stu是学生结构体数组,全局变量 for(i=0;iscount;i+) /scount代表实际的学生数量 if(strcmp(stui.no,)!=0) /去掉学号为空字符串的信息 fprintf(fp,%-8s%-10s%-10.1f%-10.1f%-10.1fn,stui.no,stui.name, stui.score0,stui.s

24、core1,stui.score2); void display/显示所有学员信息 int i; printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); printf(%-8s%-10s%-10s%-10s%-10sn, “=,=,=,=,=); for(i=0;iscount;i+) fclose(fp); /“-”表示数据左对齐,“10.1”中的10表示宽度,“.1”表示1位小数 /find查找指定学号的学员,代表指定学号的下标,如果指定学号不存在,返回-1 ;在多个模块中用到该函数 int find(char str80) int i; /s

25、tu是表示学生信息的结构体数组名 for(i=0;iscount;i+)/scount代表实际的学生数量, if(strcmp(str,stui.no)=0) return i; return -1; printf(%-8s%-10s%-10.1f%-10.1f%-10.1fn,stui.no,stui.name, stui.score0,stui.score1,stui.score2); void query /根据学号查找,并显示学员信息 char str80;int n; system(cls); printf(n请输入要查询的学生的学号:); scanf(%s,str); n=find

26、(str); if(n=-1) printf(n对不起,您要查找的学员不存在n); else printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); printf(%-8s%-10s%-10s%-10s%-10sn, =,=,=,=,=); printf(%-8s%-10s%-10.1f%-10.1f%-10.1fn,stun.no,stun.name, stun.score0,stun.score1,stun.score2); /显示完毕,提示用户返回主程序 void input/录入新学员信息 STU s;/代表新学员信息 int i; pri

27、ntf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 /先显示已有学员信息 system(cls); printf(当前学员信息如下:n); printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); printf(%-8s%-10s%-10s%-10s%-10sn, =,=,=,=,=); for(i=0;iscount;i+) stui.score0,stui.score1,stui.score2); /下面输入新学员信息 printf(nnn请输入学号,学号不允许为空字符串:); prin

28、tf(%-8s%-10s%-10.1f%-10.1f%-10.1fn,stui.no,stui.name, scanf(%s,&s.no); printf(n请输入姓名,注意姓名里不能加空格:); scanf(%s,&s.name); printf(n请输入语文成绩:); scanf(%f,&s.score0 ); printf(n请输入数学成绩:); scanf(%f,&s.score1 ); printf(n请输入英语成绩:); scanf(%f,&s.score2 ); /把临时变量s赋到结构体数组中;同时把表示学员数量的变量scount增加1 stuscount+=s; savedb;

29、/把内存中结构体数组中的学生数据保存到外存中 void update/修改学员信息 int n;char str80;STU s; system(cls); printf(当前学员信息如下:n); display;/先显示所有学员信息 printf(n请输入要修改的学生的学号:); scanf(%s,str); n=find(str); if(n=-1)/ printf(n对不起,您要查找的学员不存在n); else /您要修改的学员信息 printf(n您要修改的学员信息如下:n); printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); pri

30、ntf(%-8s%-10s%-10s%-10s%-10sn, =,=,=,=,=); printf(%-8s%-10s%-10.1f%-10.1f%-10.1fn,stun.no,stun.name, /显示完毕,提示用户返回主程序 printf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 stun.score0,stun.score1,stun.score2); /下面输入新学员信息 printf(nnn请输入修改后的学号,学号不允许为空字符串:); scanf(%s,&s.no); printf(n请输入修改后的姓名,注意姓名里不

31、能加空格:); scanf(%s,&s.name); printf(n请输入修改后的语文成绩:); scanf(%f,&s.score0 ); printf(n请输入修改后的数学成绩:); scanf(%f,&s.score1 ); printf(n请输入修改后的英语成绩:); scanf(%f,&s.score2 ); stun=s;/把修改后的值保存到内存数组中 savedb;/把内存数据保存到外存数据文件中 printf(nnttt祝贺您修改成功!); /显示完毕,提示用户返回主程序 void del/删除学员信息 int n,i;char str80;char ch; system(c

32、ls); printf(n请输入要删除的学生的学号:); scanf(%s,str); n=find(str); if(n=-1) printf(n对不起,您要删除的学员不存在n); else /您要修改的学员信息 printf(n您要删除的学员信息如下:n); printf(n%-8s%-10s%-10s%-10s%-10sn,学号,姓名,语文,数学,英语); printf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 printf(%-8s%-10s%-10s%-10s%-10sn, =,=,=,=,=); printf(%-8s%

33、-10s%-10.1f%-10.1f%-10.1fn,stun.no,stun.name, stun.score0,stun.score1,stun.score2); /提示用户是否继续删除操作 printf(n继续删除,请输入y或者Y,否则,请输入n或者N:); do scanf(%c,&ch); while(!(ch=y|ch=Y|ch=n|ch=N); if(ch=n|ch=N) printf(n您已取消删除操作,删除不成功!n); if(ch=y|ch=Y) for(i=n;i=scount-2;i+) stui=stui+1;/删除指定学号 scount-; savedb;/把内存数

34、据保存到外存数据文件中 printf(n恭喜您已成功删除!n); /显示完毕,提示用户返回主程序 printf(nnttt按任意键进入主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 void sort /对学员进行排序 char select; /代表用户所选择的子目录号 int i,j;STU t; /定义排序用的临时变量 system(cls); printf(=学员信息管理系统=nn); printf(以下是排序子目录,请选择功能nn); printf(1)按学号升序n2)按学号降序n0)退出nn); printf(键入功能前的数字后,按Enter键:)

35、; switch(select) case 1:/按学号升序 do select=getchar; printf(n按学号升序结果如下:n); for (i=0;i=scount-2;i+) for(j=i+1;j0) t=stui;stui=stuj;stuj=t; display; /显示所有学员信息 /显示完毕,提示用户返回主程序 printf(nnttt按任意键进入排序子目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 savedb; /把内存中结构体数组中的学生数据保存到外存中 break; case 2:/按学号降序 printf(n按学号降序结果如下

36、:n); for (i=0;i=scount-2;i+) for(j=i+1;j=scount-1;j+) if(strcmp(stui.no,stuj.no)0) t=stui;stui=stuj;stuj=t; display; /显示所有学员信息 /显示完毕,提示用户返回主程序 printf(nnttt按任意键进入排序子目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中 savedb; /把内存中结构体数组中的学生数据保存到外存中 break; case 0: break; /退出 default:printf(请选择功能前的数字n);break; while(select!=0); /显示完毕,提示用户返回主程序 printf(nnttt按任意键进入程序主目录.); getch; /从键盘收任一个字符即返回,该函数在conio.h中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号