C语言学生成绩管理系统报告.docx
- 文档编号:5171081
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:37
- 大小:273.35KB
C语言学生成绩管理系统报告.docx
《C语言学生成绩管理系统报告.docx》由会员分享,可在线阅读,更多相关《C语言学生成绩管理系统报告.docx(37页珍藏版)》请在冰豆网上搜索。
C语言学生成绩管理系统报告
高级语言课程设计报告
题目:
学生成绩管理系统
一、 课程设计目
让学生综合应用所学的计算机基础知识和所掌握的程序设计语言(C语言),自主实现一个较为完整的小型管理信息系统的设计与开发。
其主要目的是使通过系统分析、系统设计、编程调试,写实验报告等环节,初步掌握软件系统设计的方法和步骤,训练灵活运用程序设计语言进行软件开发的能力,提高分析问题和解决问题的能力,提高程序设计水平,培养必要的工程实践动手能力。
设计程序要求应用结构体、文件的读写来实现数据的输入、输出、添加、查询、删除、修改、存储,并能从文件进行读写以前存储的数据等。
二、课程内容
设计并实现一个小型的管理系统——学生成绩管理系统。
开发一个学生成绩管理系统,系统运行后先输入正确的密码才能进行系统数据的操作,如输入密码错误将进行提示再有几次输入机会。
输入学生的学号、姓名、英语、数学、大物成绩,系统将自动存入chengji.txt的文件当中,下次进入系统后这些信息系统将自动从文件读入内存,可以进行数据的输入、输出、查询、添加、删除、统计、修改、排序、修改密码。
本系统对查询、修改、删除、学生信息提供两种的方式,给定学生的学号或姓名,删除学生的信息或修改学生的任何一项信息,统计显示学生的英语、数学、大物、平均分、总分等各分数段人数,能按照平均分、总分大小进行降序排序,操作完后系统将自动存入chengji.txt文件当中。
三、需求分析
对所开发系统功能、性能的描述,想要实现的目标。
本次实习所设计的是一个小型的学生成绩管理系统。
它的功能比较完善,具有录入、显示、添加、查找、修改、删除、统计、排序、修改密码等功能,基本上能含盖现实生活中所要应用的学生成绩查询软件的所有功能,且操作简单,
1、基本资料的录入及存储:
录入基本资料:
学号、姓名、英语成绩、数学成绩、大物成绩。
2、输出信息:
将所录入的信息全部显示出来。
3、更新信息:
添加信息;
删除信息:
1.按照姓名删除2.按照学号删除
修改信息:
1.按照姓名修改2.按照学号修改
4、查询信息:
1.按照姓名查询。
2.按照学号查询。
5、统计信息:
该模块主要用于对各科成绩、平均成绩及总分各分数段人数的统计。
6、排序:
按平均分及总成绩由大到小排序。
四、概要设计
1.系统结构图(功能模块图)
2.功能模块说明:
菜单模块menu():
将系统的各操作模块显示出来。
密码password():
设置密码。
修改密码x_pass():
实现修改密码功能。
读取模块read():
将文件中的信息读出来,以便对其进行操作。
保存模块save():
将信息保存到文件中,以便日后浏览。
(运行修改、添加、删除、排序等功能后,可将文件另存为或保存到源文件中)
录入模块input():
输入学生成绩,实现录入功能。
输出模块print():
将所有信息显示在屏幕上,实现输出功能。
添加模块append():
添加学生信息,实现添加功能。
修改模块modify():
修改个别学生信息,实现修改功能。
按学号modify_name():
通过输入学号修改学生信息。
按姓名modify_num():
通过输入姓名修改学生信息。
查询模块search():
查询个别学生信息,实习查询功能。
按学号search_name():
通过输入学号查询学生信息。
按姓名search_num():
通过输入姓名查询学生信息。
删除模块del():
删除个别学生信息,实现删除功能。
按学号del_name():
通过输入学号删除学生信息。
按姓名del__num():
通过输入姓名删除学生信息。
排序模块rank():
将信息按顺序输出,便于浏览,实现排序功能。
按平均分rank_ave():
将信息按平均分顺序输出。
按总分rank_sum():
将信息按总分顺序输出。
按英语rank_ave():
将信息按英语分顺序输出。
按高数rank_sum():
将信息按高数分顺序输出。
按大物rank_ave():
将信息按大物分顺序输出。
五、详细设计及运行结果
主流程:
删除模块:
按姓名删除类似
查询模块:
按姓名类似;
修改模块:
按学号修改;
按姓名修改类似。
统计:
统计总分:
排序:
按总分由高到低;
按平均分排序类似;
六、调试情况,设计技巧及体会
1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
本次课程设计我做了个自己熟悉的学生成绩管理系统。
因为是初试者,所以做出的系统功能相对简单,但整个系统覆盖了实际中的各需求。
系统首先有密码设置,密码修改这有利的提高了系统安全性;接着在主函数中用了个do_while实现每个模块选项前的菜单显示;通过菜单选项,操作者可以进入各模块进行操作。
各模块又根据实际需求设置选项进行更细一步的操作,从而与实际需求相符。
总的来说系统整个框架合理有序。
不过由于初次上机,所学有限,思维漏洞多,因此有些设计不全,有些模块操作比较繁琐,整个系统相对平凡;另外,系统密码需先写好才可用,系统没有设置注册用户模块,比较遗憾。
再次,统计模块较多基本相似;以上对于问题,本次已没时间整修,而且尚需要更多的学习、探究、请教,我一定会继续完善。
2、在设计过程中的感受。
本次上机实验我深刻得体会到老师说的一句话,“这次实验要是认真做下来你会有一个质的飞跃”。
这次实验一开始,我是深受打击。
前四天几乎什么也没做。
那时只知要写个文件,整体思路漠漠忽忽,而文件知识我只敢说略知一二,具体要怎么做还不清楚,看着有些人已经上轨道,我是热锅上的蚂蚁——急的团团转;不过第五天我终于开窍了(其实这也只是我前些天不断摸索的结果),我终于把文件写出来了,那时我兴奋极了!
接下来本以为没什么难的了只管和大家一样写函数,每个函数都用到文件;不过每次都要打开关闭很麻烦,后来在同学建议下认真研究了一下课本那道商品管理系统,发现编者用了个save_file()函数,非常好,每次调用函数时打开关闭文件,所以我又大修我的程序,虽然急,但心理很高兴!
做程序时起初对学生人数是定值,相对好做,但那不实际,后来进行人数控制时走了很多弯路,主要是不清楚传值问题;后来经过看书和请教同学终于搞清楚每个要用到人数的函数多应传m,且主函数还要写上m=函数();另外非常感谢老师教的技巧:
每个模块可以单独调试,调试好后组合一块;编程的格式要好看,容易检查错误。
本次实验非常感谢同学和老师的帮助!
七、参考文献
《C语言程序设计》王曙燕曹锰科学出版社2005年2月
《C语言程序设计》谭浩强清华大学出版社1999年1月
《C语言程序设计题解与上机指导》谭浩强清华大学出版社2005年7月
《C语言课程设计实例精选与编程指导》东南大学出版社
八、附录:
源代码
(略,详见电子版实验报告)
源码:
#include"stdio.h"
#include
#include
#definemax20
getch();
structst
{
intnum;
charname[10];
floatenglish;
floatmath;
floatpysical;
floatave;
floatsum;
};
voidmenu()
{
system("cls");
printf("\n\n\t\t\t*****************************\n\n\t\t\t\t学生成绩管理表\n\n\t\t\t*****************************\n");
printf("\t\t1.信息创建\t");
printf("\t\t2.信息添加\n\n");
printf("\t\t3.信息显示\t");
printf("\t\t4.信息查询\n\n");
printf("\t\t5.信息修改\t");
printf("\t\t6.信息删除\n\n");
printf("\t\t7.排序\t\t");
printf("\t\t8.统计\n\n");
printf("\t\t9.修改密码\n\n");
printf("\t\t\t\t0.退出\t\t");
printf("\n\n请输入选项0~9:
");
}
intread_file(structsts[])
{
FILE*fp;
inti=0;
fp=fopen("e:
\\chengji.txt","rb");
if((fp=fopen("e:
\\chengji.txt","rb"))==NULL)
{
printf("文件不存在,请创建!
\n");
return0;
}
do
{
fread(&s[i],sizeof(structst),1,fp);
i++;
}while(!
feof(fp));
fclose(fp);
returni-1;
}
voidsave_file(structsts[],intm)
{
FILE*fp;
inti;
if((fp=fopen("e:
\\chengji.txt","wb"))==NULL)
{
printf("读文件错误!
\n");
return;
}
for(i=0;i if(fwrite(&s[i],sizeof(structst),1,fp)! =1) printf("写文件错误! \n"); fclose(fp); } /*添加模块*/ intappend(structsts[],intm) { charx; system("cls"); do { printf("\n请输入要添加的学生信息: "); printf("\n\t\t学生姓名: "); flushall(); gets(s[m].name); printf("\t\t学号: "); scanf("%d",&s[m].num); printf("\t\t英语成绩: "); scanf("%f",&s[m].english); printf("\t\t数学成绩: "); scanf("%f",&s[m].math); printf("\t\t大物成绩: "); scanf("%f",&s[m].pysical); s[m].ave=(s[m].english+s[m].math+s[m].pysical)/3; s[m].sum=s[m].english+s[m].math+s[m].pysical; m+=1; printf("是否要继续添加: Y_N"); do{ x=getch(); }while(x! ='y'&&x! ='Y'&&x! ='n'&&x! ='N'); }while(x=='y'||x=='Y'); save_file(s,m); m=print(s,m); printf("\n按任意键返回主菜单! "); getch(); returnm; } /*密码*/ voidpassword() { FILE*fp; inti,j; //charpassword[7]="123456"; charpassword[7]; charpass[7]; fp=fopen("e: /w.txt","rb"); //fwrite(password,sizeof(password),7,fp);fclose(fp); printf("\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"); printf("\n\n\t\t\t欢迎使用学生成绩管理系统\n\n\n"); printf("\t&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&"); for(i=0;i<3;i++) { fread(password,1,7,fp); printf("\n\t\t\t请输入密码(6位): "); for(j=0;j<6;j++) { flushall(); pass[j]=getch(); printf("*"); } pass[6]='\0'; getch(); if(strcmp(password,pass)==0) break; else printf("\n\n\t\t\t密码输入错误,请重新输入! ! \n\n"); } if(i==3) { printf("\n\n\t\t\t对不起输入超过三次,系统将自动退出! ! ! \n\n"); exit (1); } } /*修改密码*/ voidx_pass() { intj; FILE*fp; charpass1[7],pass2[7]; system("cls"); printf("\t\t\t请输修改后的密码(6位): "); do { for(j=0;j<6;j++) { flushall(); pass1[j]=getch(); printf("*"); } pass1[6]='\0'; getch(); printf("\t\t\t\n\n再输入一遍(6位): "); for(j=0;j<6;j++) { flushall(); pass2[j]=getch(); printf("*"); } pass2[6]='\0'; getch(); if(! strcmp(pass1,pass2)) { printf("密码修改成功! ! ! \n\n"); break; } elseprintf("两次输入密码不一样,请从新输入\n\n"); }while (1); fp=fopen("e: /w.txt","wb"); fwrite(pass1,1,7,fp); fclose(fp); } /*输入模块*/ intinput(structsts[],intm) { inti; floatave1=0.0,ave2=0.0,ave3=0.0; system("cls"); printf("\n\n输入学生信息(最多%d个)\n",max); printf("请输入学生数: \n"); scanf("%d",&m); for(i=0;i { printf("\n\t\t学生%d: ",i+1); printf("\n\t\t学生姓名: "); flushall(); gets(s[i].name); printf("\t\t学号: "); scanf("%d",&s[i].num); printf("\t\t英语成绩: "); scanf("%f",&s[i].english); printf("\t\t数学成绩: "); scanf("%f",&s[i].math); printf("\t\t大物成绩: "); scanf("%f",&s[i].pysical); s[i].ave=(s[i].english+s[i].math+s[i].pysical)/3; s[i].sum=s[i].english+s[i].math+s[i].pysical; } printf("\n按任意键返回主菜单! "); getch(); returnm; } /*输出模块*/ intprint(structsts[],intm) { inti; system("cls"); printf("\t\t显示信息\n\n"); printf("------------------------------------------------------\n"); printf("姓名学号英语数学大物平均分总分\n"); for(i=0;i { printf("%6s%d%.2f%.2f%.2f%.2f%.2f",s[i].name,s[i].num,s[i].english,s[i].math, s[i].pysical,s[i].ave,s[i].sum); printf("\n"); printf("------------------------------------------------------\n"); } printf("按任意键返回! \n"); getch(); system("cls"); returnm; } /*按姓名查询*/ voidsearch_name(structsts[],intm) { inti; charname[20]; system("cls"); printf("\n\n\t请输入所查询学生的姓名: \n\t\t\t\t"); flushall(); gets(name); for(i=0;i { printf("\t\t--------------------------\n"); if(strcmp(s[i].name,name)==0) printf("%6s%d%.2f%.2f%.2f%.2f%.2f",s[i].name,s[i].num,s[i].english,s[i].math, s[i].pysical,s[i].ave,s[i].sum); } //printf("\t\t--------------------------\n"); printf("按任意键返回! \n"); getch(); system("cls"); } /*按学号查询*/ voidsearch_num(structsts[],intm) { inti,nu,flag=0; system("cls"); printf("\n\n\t输入要查询的学生学号: \n\t\t\t\t"); scanf("%d",&nu); for(i=0;i { //printf("姓名学号英语数学大物平均分\n"); printf("\t\t\t--------------------------\n"); if(s[i].num==nu) printf("\t\t%6s%d%.2f%.2f%.2f%.2f%.2f\n",s[i].name,s[i].num,s[i].english,s[i].math, s[i].pysical,s[i].ave,s[i].sum); flag=1; } //printf("\t\t--------------------------\n"); if(flag==0) printf("\n\t\t无此学生! ! ! \n\n\n"); printf("按任意键返回! \n"); getch(); system("cls"); } /*查询模块*/ voidsearch(structsts[],intm) { intchoice; system("cls"); printf("\n\n\t\t0.退出\n\n\t\t1.按学号查询\n\n\t\t2.按姓名查询\n\n"); printf("请选择输出方式: "); scanf("%d",&choice); switch(choice) { case0: break; case1: search_num(s,m);break; case2: search_name(s,m);break; } } /*按学号删除*/ intdel_number(structsts[],intm) { inti,j,num; system("cls"); printf("\n请输入要删除的学生号: \n"); scanf("%d",&num); for(i=0;i { if(s[i].num==num) { for(j=i;j s[j]=s[j+1]; m-=1; } } save_file(s,m); m=print(s,m); returnm; } /*按姓名删除*/ intdel_name(structsts[],intm) { inti,j; charname[20]; system("cls"); printf("\n请输入要删除的学生姓名: \n"); flushall(); gets(name); for(i=0;i { if(strcmp(s[i].name,name)==0) for(j=i;j { s[j]=s[j+1]; m-=1; } } save_file(s,m); m=print(s,m); returnm; } /*删除模块*/ intdel(structsts[],intm) { intchoice; system("cls"); printf("\n\n\t\t0.退出\n\n\t\t1.按学号删除\n\n\t\t2.按姓名删除\n\n"); printf("请选择输出方式: "); scanf("%d",&choice); switch(choice) { case0: break; case1: m=del_number(s,m);break; case2: m=del_name(s,m);break; } returnm; } /*按学号修改*/ intmodify_number(structsts[],intm) { intnum,flag,choice; inti; do { system("cls"); printf("\n\n\t请输入要修改的学生的学号: \n"); scanf("%d",&num); for(i=0;i if(s[i].num==num) { pr
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 学生 成绩管理系统 报告