《c语言课程设计--学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计--学生成绩管理系统.docx(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、内蒙古科技大学内蒙古科技大学课程设计任务书题 目:C语言课程设计 学生成绩管理系统学生姓名:学 号:专 业:软件工程班 级:1班指导教师:日 期: 2016 年 1 月 6 日内蒙古科技大学课程设计任务书课程名称C语言课程设计设计题目学生成绩管理系统 指导教师时间2015.1.52015.1.9一、教学要求1. 巩固和加深学生对C语言课程的基本知识的理解和掌握2. 掌握C语言编程和程序调试的基本技能3. 利用C语言进行基本的软件设计4. 掌握书写程序设计说明文档的能力5. 提高运用C语言解决实际问题的能力二、设计资料及参数每个学生在教师提供的课程设计题目中任意选择一题,独立完成,题目选定后不可
2、更换。某班学生成绩管理,包括以下功能:v 从键盘输入包括学号、姓名、各门课程成绩(不少于5门),并将其保存在磁盘文件里v 打开文件后,计算每个人的总分和平均分,排序并保存v 具有单项查询或多项查询的功能(即按照给定的关键字,如姓名找出满足条件的纪录)v 具有插入、删除和修改功能v 具有输出文件数据信息的功能三、设计要求及成果1. 分析课程设计题目的功能需求(可选用数组或链表实现,可多人(最多3人)协作完成一个题目)2. 写出详细设计说明(至少包括功能实现分析和模块流程图)3. 编写程序代码,调试程序使其能正确运行(代码书写要规范,标示符要见名知意,要有必要的注释,每人至少500行代码,不包括注
3、释和花括号)4. 设计完成的软件要便于操作和使用5. 设计完成后提交课程设计报告(请严格按照模板进行排版)四、进度安排第一天 选择课程设计题目,分析课题的要求第二天 编程第三天 编程及调试第四天 写课程设计报告第五天 提交课程设计报告(打印稿及电子稿)五、评分标准1. 根据平时上机考勤、表现和进度,教师将每天点名和检查2. 根据课程设计完成情况,必须有可运行的软件。3. 根据课程设计报告的质量,如有雷同,则所有雷同的所有人均判为不及格。六、建议参考资料1C语言程序设计,谭浩强,清华大学出版社2C语言程序设计课程设计,刘振安,机械工业出版社图1.系统的总体流程图输入学生数输入科目继续?操作成功输
4、出到屏幕保存到文件中输入要查询的学生姓名或学号2,总分高到低排列1,输出总 分平均分录入学生成绩计算各个学生总分平均分菜单输入选项0,退出程序9,增加成绩,8,删除成绩7, . 修改成绩6 . 按学号查询5 . 按姓名查询3,总分低到高排列4 . 按学号排列结束Yes No 1,函数开头如下:#include#include#include#define MAX_LEN 10 /学生姓名字符长度#define STU_NUM 30 /学生学号数字长度#define COURSE_NUM 8 / 最大科目数量2,为了方便实用变量,先定义一个学生信息结构体。typedef struct stude
5、nt long num;char nameMAX_LEN;float scoreCOURSE_NUM;float sum;float aver;STU;1.菜单模块:显示学生成绩管理系统的主菜单,供用户选择所需的功能,通过自己定义的void menu()函数来实现。2.输入模块:输入学生的学号、姓名以及所有科目成绩,通过自己定义的void shuru()函数来实现。3,计算板块:计算各个学生的总分和平均分,可以通过void zfpjf()来实现。4,排序板块。按学生总分高到低或低到高和学号进行排序。通过void gaodi(),void digao()以及void xuehao()函数来实现。
6、4.保存模块:将内存中学生的信息输出到磁盘文件中,可以通过自己定义的void bcxh()和void bcgaodi()函数来实现。5.按学生学号查询模块:可以按学生学号来查询职工的相关信息,通过自己定义的void czh()函数来实现。6.按学生的姓名查询模块:可以按学生的姓名来查询职工的相关信息,通过自己定义的void czm()函数来实现。9.修改模块:可以修改需要修改的学生的相关信息,通过自己定义的void xg()函数 来实现。5.删除模块:删除需要删除的学生的所有信息,可以通过自己定义的void sc()函数来实现。6.添加模块:添加需要添加的职工的相关信息,可以通过自己定义的vo
7、id zj()函数来实现。11.退出系统模块:退出职工信息管理系统,通过头文件exit(0)函数来实现使用说明及运行实例一,运行程序,输入学生人数和科目人数。按回车键后输入学生学号,姓名以及各科成绩。 (图1)二,输入完成后按回车键,显示出菜单。三,输入你的选择。1, 计算总分和平均分并输出到屏幕上。 2, 输入y回到主页面(如图1)。输入2按总分从高到低排序并输出到屏幕上。3, 输入y回到主页面(如图1)。输入3按总分从低到高排序并输出到屏幕上。 4, 输入y回到主页面(如图1)。 输入4按学号排序并输出到屏幕上。 5, 输入y回到主页面(如图1)。 输入5按姓名查询成绩。 输入姓名后按回车
8、键。6, 输入y回到主页面(如图1)。输入6按学号查询成绩。输入学号后按回车键。7, 输入y回到主页面(如图1)。 输入7按回车键后,输入要修改学生的学号再按回车键,最后输入新的学生信息。然后按2键将修改后成绩表输出到屏幕。8,输入y回到主页面(如图1)。 输入8按回车键后,输入要删除学生的学号再按回车键。然后按2键将修改后成绩表输出到屏幕。9,输入y回到主页面(如图1)。 输入9按回车键后,输入新学生的信息。然后按2键将修改后成绩表输出到屏幕。关于输出文件。在进行按总分从高到低排序和按学号排序后,已将排序好的成绩保存在电脑文件中。打开按学号排序的文件:打开按总分高到低排序的文件:学生成绩管理
9、系统源程序代码/ 函数首部#include#include#include#define MAX_LEN 10#define STU_NUM 30#define COURSE_NUM 8/ 定义结构体typedef struct student long num;char nameMAX_LEN; /定义姓名数组float scoreCOURSE_NUM; /定义成绩数组float sum; float aver;STU;int Menu(void);void shuru(STU stu,int n,int m); / 输入分数void zfpjf(STU stu,int n,int m);
10、/ 计算总分平均分void gaodi(STU stu,int n,int m); / 按总分高到低排列void digao(STU stu,int n,int m); / 按总分低到高排列void jhf(float *x,float *y); /交换分数void jhh(long *x,long *y); /交换学号void jhm(char x,char y); /交换姓名void xuehao(STU stu,int n,int m); /按学号排列void czm(STU stu,int n,int m); /按姓名查找void czh(STU stu,int n,int m); /
11、按学号查找void xg(STU,int n,int m); /修改学生成绩void sc(STU stu,int n,int m); /删除学生成绩void zj(STU stu,int n,int m); /增加学生成绩void shuchu(STU stu,int n,int m); /将成绩表输出到屏幕void bcgaodi(STU stu, int n, int m); /将成绩表以文件形式保存到电脑void bcxh(STU stu, int n, int m); /将成绩表以文件形式保存到电脑int main()char ch;int n=0;int m=0;char a;ST
12、U stuSTU_NUM;printf(tttt欢迎使用成绩管理系统n);printf(请输入学生数:n);scanf(%d,&n);printf(请输入课程数:n);scanf(%d,&m);shuru(stu,n,m); / 录入成绩zfpjf(stu,n,m); /录入成绩后计算总分与平均分doch = Menu();switch(ch)case 1:int i,j;printf(学号tt姓名 t各科平均分 t总分n); for(i=0;in;i+) printf(%10ldt%st %.2ft %.fn, stui.num,stui.name,stui.aver,stui.sum);
13、break;case 2:gaodi(stu,n,m);printf(按总分高到低排序:n);printf(学号 姓名t英语t数学t物理tC语言t计算机 总分 平均分 n);shuchu(stu,n,m);bcgaodi(stu,n,m); /进行排序后将成绩表以文件形式保存到电脑break;/ 学号姓名之间12个空格case 3:digao(stu,n,m);printf(按总分低到高排序:n);printf(学号 姓名t英语t数学t物理tC语言t计算机 总分 平均分 n);shuchu(stu,n,m);break;case 4:xuehao(stu,n,m);printf(按学号排序:n
14、);printf(学号 姓名t英语t数学t物理tC语言t计算机 总分 平均分 n);shuchu(stu,n,m);bcxh(stu,n,m); /进行完排序后将成绩表以文件形式保存到电脑上break;case 5:czm(stu,n,m); /姓名查找break;case 6:czh(stu,n,m); /学号查找break;case 7 :xg(stu,n,m); /修改break;case 8:sc(stu,n,m); /删除-n;break;case 9:zj(stu,n,m);+n;break;case 0: printf(程序结束n);exit(0);default:printf(
15、输入错误n);printf(你要继续进行操作吗?(输入y继续操作):); scanf( %c,&a);while(a=y);return 0;int Menu(void)int itemSelected;printf(n);printf(-学生成绩管理系统-n);printf( 请选择你要进行的操作:n);printf( 1 . 计算各个学生的总分与平均分n);printf( 2 . 按总分从高到低排列n);printf( 3 . 按总分从低到高排列n);printf( 4 . 按学号排列n);printf( 5 . 按学生姓名查询成绩n);printf( 6 . 按学生学号查询成绩n);pr
16、intf( 7 . 修改n);printf( 8 . 删除n);printf( 9 . 新增n);printf( 0 . 退出n);printf( 请输入你的选择:n);printf( (按回车键结束)n);scanf(%d,&itemSelected);return itemSelected;void shuru(STU stu,int n,int m) /录入成绩到数组中int i,j;printf(请分别输入学生的学号 姓名 英语 数学 物理 C语言 计算机成绩:n);for(i=0;in;i+) scanf(%ld %s,&stui.num,stui.name);for(j=0;jm;
17、j+)scanf(%f,&stui.scorej); void zfpjf(STU stu,int n,int m) / 计算总分和平均分 int i,j;for(i=0;in;i+)stui.sum = 0;for(j=0;j0 ? stui.sum/m:-1;void gaodi(STU stu,int n,int m) /用选择法将总分按高到低排序int i,j,k,t;for(i=0;in-1;i+) k=i;for(j=i+1;jstuk.sum) k=j;if(k!=i)for(t=0;tm;t+) jhf(&stuk.scoret,&stui.scoret); jhf(&stuk
18、.sum,&stui.sum);jhf(&stuk.aver,&stui.aver);jhh(&stuk.num,&stui.num);jhm(stuk.name,stui.name); void digao(STU stu,int n,int m) /用选择法将总分按高到低排序int i,j,k,t;for(i=0;in-1;i+) k=i;for(j=i+1;jn;j+)if(stuj.sumstuk.sum) k=j;if(k!=i)for(t=0;tm;t+) jhf(&stuk.scoret,&stui.scoret); jhf(&stuk.sum,&stui.sum);jhf(&s
19、tuk.aver,&stui.aver);jhh(&stuk.num,&stui.num);jhm(stuk.name,stui.name); void jhf(float *x,float *y) / 交换分数float temp;temp=*x; *x=*y; *y=temp;void jhh(long *x,long *y)long temp;temp=*x; *x=*y; *y=temp;void jhm(char x,char y) char tempMAX_LEN;strcpy(temp,x);strcpy(x,y);strcpy(y,temp);void xuehao(STU s
20、tu,int n,int m) /按学号将总分进行排序int i,j,k,t;for(i=0;in-1;i+)k=i;for(j=i+1;jn;j+)if(stuj.numstuk.num)k=j;if(k!=i)for(t=0;tm;t+)jhf(&stuk.scoret,&stui.scoret);jhf(&stuk.sum,&stui.sum);jhf(&stuk.aver,&stui.aver);jhh(&stuk.num,&stui.num);jhm(stuk.name,stui.name);void czh(STU stu,int n,int m) /按学号查找成绩long num
21、ber;int i,j;printf(请输入要查询的学号:n);scanf(%ld,&number);for(i=0;in;i+)if(stui.num = number)printf(学生%ld的成绩如下n,stui.num);printf(ttt英语t数学t物理tC语言t计算机t总分t平均分n);printf(%ldt%st,stui.num,stui.name);for(j=0;jm;j+)printf(%0.ft,stui.scorej);printf(% .0ft%.2fn,stui.sum,stui.aver);return;printf(n无法找到n);void czm(STU
22、stu,int n,int m) / 按姓名查找成绩char xMAX_LEN;int i,j;printf(请输入要查询的姓名:n);scanf(%s,x);for(i=0;in;i+)if(strcmp(stui.name,x)=0)printf(学生%s的成绩如下:n,stui.name);printf(ttt英语t数学t物理tC语言t计算机t总分t平均分n);printf(%ldt%st,stui.num,stui.name);for(j=0;jm;j+)printf( %0.ft,stui.scorej); /格式前有一个空格printf(%.0ft%.2fn,stui.sum,st
23、ui.aver);return;printf(n无法找到n);/ 找到要修改的学生信息所在数组的下标,再重新输入学生信息给要修改的学生的结构体成员赋值。void xg(STU stu,int n,int m) /修改学生成绩 long x;int i;int a;int j;printf(请输入要修改学生的学号:n);scanf(%ld,&x);for(i=0;in;i+)if(stui.num=x)a=i;printf(请分别输入要修改学生的新学号 姓名 英语 数学 物理 C语言 计算机成绩:n);scanf(%ld %s,&stua.num,stua.name);for(j=0;jm;j+
24、)scanf(%f,&stua.scorej);stua.sum = 0;for(j=0;j0 ? stua.sum/m:-1;printf(成绩已修改!n);return;printf(无法找到!n);/ 找到要删除的学生信息所在数组的下标,如果要删除学生在数组中所表示为ai,就从ai后面开始,用ai+1给ai赋值。删除函数结束后,在函数调用后面加上 -n,这样就可以使后面的输出少输出一个学生。从而达到删除作用。void sc(STU stu,int n,int m) /删除学生成绩long x;int i;int j;int k;printf(请输入要删除学生的学号:n);scanf(%l
25、d,&x);for(i=0;in;i+)if(stui.num=x)for(k=1;kn-i;k+)stui.num=stui+1.num;strcpy(stui.name,stui+1.name);stui.sum=stui+1.sum;stui.aver=stui+1.aver;for(j=0;jm;j+)stui.scorej=stui+1.scorej;printf(成绩已删除!n);/ 因为数组下标是由0开始,所以i最大值为n-1。将n赋值给i在输入一个新学生的成绩进入stui,就可以将一个新学生的成绩加入到数组中。函数结束后,在函数调用后面加上 +n,这样就可以使后面的输出多输出一
26、个学生。从而达到增加作用。void zj(STU stu,int n,int m) /增加学生成绩int i;int j;i=n;printf(请分别输入学生的学号 姓名 英语 数学 物理 C语言 计算机成绩:n);scanf(%ld %s,&stui.num,stui.name);for(j=0;jm;j+)scanf(%f,&stui.scorej);stui.sum = 0;for(j=0;j0 ? stui.sum/m:-1;printf(成绩添加成功!n);void shuchu(STU stu,int n,int m) /输出成绩表到屏幕int i,j;for(i=0;in;i+)
27、printf(%ldt%st,stui.num,stui.name);for(j=0;jm;j+)printf( %0.ft,stui.scorej);printf(%0.ft%.2fn,stui.sum,stui.aver);void bcxh(STU stu, int n, int m) /保存学号排序文件FILE *fp;int i, j;if (fp = fopen(按学号排序.txt,w) = NULL) /* 以写方式打开文本文件 */ printf(Failure to open score.txt!n);exit(0);for (i=0; in; i+)fprintf(fp,
28、%10ld%8st, stui.num,stui.name);for (j=0; jm; j+)fprintf(fp, %0.ft, stui.scorej);fprintf(fp, %0.ft%0.2fn,stui.sum,stui.aver);fclose(fp);void bcgaodi(STU stu, int n, int m) /保存从高到低排序文件FILE *fp;int i, j;if (fp = fopen(总分从高到低排序.txt,w) = NULL) /* 以写方式打开文本文件 */ printf(Failure to open score.txt!n);exit(0);for (i=0; in; i+)fprintf(fp, %10ld%8st, stui.num,stui.name);for (j=0; jm; j+)fprintf(fp, %0.ft, stui.scorej);fprintf(fp, %0.ft%0.2fn,stui.sum,stui.aver);fclose(fp);