1、学生成绩管理系统目录5.1 题目5.2 课程设计5.3 需求分析5.4 设计要求5.4.1功能设计要求5.4.2总体设计5.4.3函数设计5.5源程序5.6总结5.7参考资料学生成绩管理系统2.1 题目 学生成绩管理系统2.2 课程设计目的1 要求学生达到熟练掌握C语言的基本知识和技能2 掌握利用工具软件开发系统的基本思路和方法3 强化上机动手能力,闯过编码关,把理论与实际应用相结合2.3 需求分析 本课程设计是一个简单的学生成绩管理系统,该系统用以实现学生基本信息的编辑,课程信息的编辑,成绩信息的编辑,学生成绩统计等等。2.4 设计要求 2.4.1 功能设计和要求设计要求实现的功能很多,主要
2、分为几个板快进行分析。1 系统功能 学生基本信息的编辑:包括学生信息的录入、修改、删除和查询等功能。 课程信息的编辑:包括课程信息的录入、修改、删除和查询等功能。 成绩信息的编辑:包括学生成绩的录入、修改、删除和查询等的功能。 学生成绩统计,包括:按学号、按课程号求平均分、各分数段的人数与百分比。按学号求不及格的门数。按课程号求不及格的人数。 通过菜单选择退出系统,并有退出系统的提示或确认。2 系统要求 使用菜单操作。 学生信息用文件保存。 进入系统的时候,要验证用户身份(用户名和密码)。3 应用程序的总体设计图: (1) 程序加密在开始进入系统的时候,首先要进行密码核对,以便对程序进行保护,
3、核对正确后,才能进入系统。(2) 主页面从键盘录入学生成绩的基本信息。1 按照一定的顺序依次输入学生的“学号”、“姓名”、“语文”、“数学”、“英语”等基本内容。2 学生姓名要和学生成绩相匹配。3 输入完毕后要保存学生信息。(3) 增加学生成绩界面输入学生的基本信息。(4) 删除学生成绩界面 删除学生的基本信息。(5) 修改学生成绩界面按学号选择需要修改的学生信息。(6) 查找学生成绩界面 查找已经保存了的学生信息。 按照学号查找。(7)统计学生成绩界面 按学号、按课程号求平均分、各分数段的人数与百分比。 按学号求不及格的门数。 按课程号求不及格的人数。2.4.2总体设计最初的规划只是说明它的
4、可行性,不要求制定函数的具体实现,甚至不需要考虑数原型。完成规划后,按照各个模块的功能连接描述。1 要求使用多个文件方式实现设计;2 要求在个各文件内实现结构化设计;3 每个文件作为单独的C文件,分别说明每个函数的功能和实现方法。2.4.3 函数设计下面分别描述一些函数,建立它们的原型。1 保存函数函数原型: struct student_type * saveDate(struct student_type * head)功 能: 保存学生信息参 数: struct工作方式:保存输入的学生信息要 求:保存在文件里2 查找函数函数原型: struct student_type * find(s
5、truct student_type * head,long num)功 能: 查找学生信息参 数: struct工作方式:查找输入的学生信息要 求:只对储存内容进行查找3 增加函数函数原型: struct student_type * add(struct student_type * head)功 能: 增加学生信息参 数: struct工作方式:输入学生的信息要 求:按顺序输入4 浏览函数函数原型: void browse功 能: 浏览保存的学生信息参 数: void工作方式:浏览学生的信息要 求:只能浏览保存的学生信息5 修改函数函数原型:void changeDate(struct
6、student_type * head)功 能: 修改保存的学生信息参 数: void工作方式:浏览学生的信息要 求:只能修改保存的学生信息6 统计函数函数原型: struct student_type * stat(struct student_type * head)功 能: 按学号、按课程号求平均分、各分数段的人数与百分比;按学号求不及格的门数。按课程号求不及格的人数参 数: struct工作方式:统计学生的信息要 求:只能统计输入的学生信息7 删除函数函数原型: struct student_type * delDate(struct student_type * head)功 能:
7、删除学生的信息参 数: void工作方式:删除学生的信息要 求:只能删除保存的学生信息工作方式:删除学生的信息要 求:只能删除保存的学生信息8 身份验证系统函数原型: void main()功 能:验证用户的身份参 数: void工作方式:验证身份要 求:只能验证设置好的用户身份9 主函数函数原型: void main()功 能:控制程序参 数: void要 求:管理菜单命令10 头函数函数原型: stdio.h功 能:声明函数原型、包含文件、自定义及数据结构要 求:报告是否能正常打开文件执行存入操作及存入记录的条数2.5源程序/ sixStuMakeAdmin.cpp : Defines t
8、he entry point for the console application./*学生成绩管理系统 a) 用结构体形式实现对学生成绩的描述,结构体成员包括:学号,姓名,语文,数学,英语;b) 能够进行数据记录的增加、查询、修改、统计、删除、保存;c) 能够将学生的基本信息存放在文件中,系统可以再次从文件中读出保存的数据;d) 定义一个操作命令集,例如 H-帮助 A-增加 R-浏览 M-修改B-统计D-删除 S-保存 F-查找 Q-退出 C-清除所有记录*/#include stdio.h#include malloc.h#include#include#include#include#
9、define NULL 0#define LEN sizeof(struct student_type)#define LEN_S sizeof(struct student)#define NAME_LEN 10#define FILENAME score.dat#define TEST 0/0表示不输出测试信息,表示输出void homepage(); void quit(); /退出界面void main() int i,k=0,j; char username15,pwd6; system(color 3f); printf(nn); printf( tn); printf( t*n)
10、; printf( t*n); printf( t*n); printf( t* *n); printf( t* 欢迎使用学生成绩管理系统 *n); printf( t* *n); printf( t* *n); printf( t* 电信七班 刘萍 *n); printf( t* *n); printf( t* 2008.6.23 *n); printf( t* *n); printf( t*n); printf( t*n); printf( t*n); printf( tn); for(i=0;i20) break; pwdj=0; if(strcmp(username,060502070
11、3)=0)&(strcmp(pwd,123456)=0) printf(n您已经成功登录n); k=1; for(i=0;istu.num=stud.num; for(int i=0;istu.namei=stud.namei; p1-stu.chinese=stud.chinese; p1-stu.math=stud.math; p1-stu.english=stud.english; p1-next=NULL; if(n=1) p2=p1; head=p2; else /p2保存p1之前的数据 p2-next=p1; p2=p1; fclose(fp);return(head);/S-保存
12、struct student_type * saveDate(struct student_type * head) if(num_change=0) printf(*当前没有改动需要保存!*n); return(head); FILE *fp; struct student_type * p; p=head; if(fp=fopen(FILENAME,wb)=NULL) printf(cant open filen); return(head); n=0;/重新对记录条数记数 if(TEST) printf(saveDate(head)%dn,p); if(head!=NULL) do if
13、(fwrite(p,LEN_S,1,fp)!=1) printf(file write errorn); else n+; p=p-next; while(p!=NULL); fclose(fp); num_change=0;/保存了所有的记录,未保存数归零 printf(保存成功!共记%d条记录n,n); return(head);/R-浏览void browse() FILE *fp; struct student stud; if(fp=fopen(FILENAME,rb)=NULL) printf(ncant open filen); if(n=0)printf(*没有记录*n);el
14、se printf(n 学生成绩表n); printf(=n); printf( 学号 姓名 语文 数学 英语 n); while(fread(&stud,LEN_S,1,fp)=1) printf(-n); printf(%8ld %-10s %-8.1f %-8.1f %-8.1fn,stud.num,stud.name,stud.chinese, stud.math,stud.english); printf(=n); printf(共记%d条记录n,n);/F-查找(查找学号为num的记录,返回指向那条记录的指针)struct student_type * find(struct st
15、udent_type * head,long num) if(head=NULL)/没有记录 或学号为负了,学号应不小于为0 return NULL; struct student_type * p1; p1=head; while(num!=p1-stu.num & p1-next!=NULL) /如果没找到所要的结点,并且没有到最后一下结点,p1后移一个结点 p1=p1-next; if(num=p1-stu.num)/找到了 return(p1); return NULL;/A-增加struct student_type * add(struct student_type * head)
16、struct student_type * newstudent;struct student_type * p;char t;long numstu;/输入的学号printf(你将增加1条记录n);/不允许输入相同的学号printf(学号:);scanf(%ld,&numstu);if(numstustu.num=numstu;printf(姓名:);scanf(%s,newstudent-stu.name);scanf(%c,&t);/接收回车printf(语文:);scanf(%f,&newstudent-stu.chinese);printf(数学:);scanf(%f,&newstu
17、dent-stu.math);printf(英语:);scanf(%f,&newstudent-stu.english);p=head;head=newstudent;newstudent-next=p;num_change+;/增加没有保存的记录条数printf(增加了1条记录n);printf(请输入S命令立即保存,否则会造成数据丢失!n);return(head);/B-统计 #define M 4 #define N 3 struct student_type * stat(struct student_type * head) float studentMN; float avera
18、geM=0; int i,j; for(i=0;iM;i+) printf(请输入学号为%d学生3门课的成绩,i+1); for(j=0;jN;j+) scanf(%f,&studentij); averagei+=studentij; for(i=0;iM;i+) printf(学号为%d个学生的平均成绩为%.2fn,i+1,averagei/N); return 0; / D-删除struct student_type * delDate(struct student_type * head) /删除可能删掉头指针,所以要返回头指针 if(head=NULL) printf(没有数据记录n
19、);return(head); printf(你将删除1条记录n);struct student_type * p1,* p2;long num_s;printf(要删除的学生的学号:);scanf(%ld,&num_s);if(num_sstu.num & p1-next!=NULL)p2=p1;p1=p1-next;if(num_s=p1-stu.num)/显示查到的要删除的学生的信息printf( *将要删除的学生的信息*n); printf( 学号 姓名 语文 数学 英语n); printf(%8ld %-10s %-8.1f %-8.1f %-8.1fn,p1-stu.num,p1-
20、stu.name,p1-stu.chinese,p1-stu.math,p1-stu.english);if(p1=head)head=p1-next;elsep2-next=p1-next;num_change+;/增加没有保存的记录条数printf(删除了1条记录n);printf(请输入S命令立即保存,否则会造成数据丢失!n);elseprintf(查无此人!n);return(head);/M-修改void changeDate(struct student_type * head) if(head=NULL) printf(*没有数据!*n);return; printf(你将修改1条记录n);struct student_type * p;long num_s,numstu;/修改前的学号,修改后的学号printf(要作修改的学生的学号:);scanf(%ld,&num_s);if(num_sstu.num,p-stu.name,p-stu.chinese,p-stu.math,p-stu.english);printf( *修改:*
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1