




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、学生成绩管理分析系统设计报告本次作业的任务是设计一个学生成绩管理分析系统,通过此次设计任务达到基本掌握面向过程程序设计的基本思路和方法,熟练使用C语言的知识和技能来解决简单的程序设计问题。一、 需求分析1. 功能需求为了实现学生成绩的管理与分析,需要输入学生的基本信息和学习信息,要保证信息的准确性,需要提供包含添加、删除等修改功能,在此基础上,提供统计与分析手段。因此,通过对需求的分析,本程序设计的功能需求如下:a) 信息输入b) 信息显示c) 信息修改d) 信息分析2. 系统需求根据任务要求,实现学生成绩的管理与分析需要使用标准C语言进行编程;由于本程序满足任务要求的功能需求计算简单,信息的
2、显示均为文本类型,且无通讯方面的需求,因此占用计算机的资源较少。本程序的数据量大小取决于管理学生数量的多少,根据中国各高校情况分析,在校学生少则数百人,多则数万人,而每一名学生记录仅需要数十字节,因此数据的存取量需求最大不会超过10GB。综上所述,本程序对系统的需求,目前一台普通计算机即可满足使用。本程序设计拟采用VC 编制,在Windows 2000操作系统下开发实现。二、 总体设计本程序设计采用模块化设计,每一个模块实现一项功能。按照不同的功能对学生成绩管理分析系统进行模块划分,其总体设计如下:l 数据录入模块。每个学生的基本信息和成绩用一个结构体来表示,称为一条记录,可以增加或者删除记录
3、。为简化问题,能对学生的总成绩进行排序,这里约定相同系别的学生所选科目的数量一致,不同系别的学生所选科目可以不同。l 数据查询模块。对已经录入的学生基本信息和成绩进行查询,可以查询单个学生的基本信息和成绩,比如通过学号、姓名等关键字查询,也可以查询某类数据,比如通过系别关键字查询该系所有学生的资料、通过科目名称查询参加该科考试的所有学生的成绩。l 数据修改模块。对学生基本信息或成绩进行修改,并保存记录。l 数据分析模块。包括对每系或每班的单科成绩的分析,如求平均成绩、及格率、优秀率等;对选修某科的所有学生成绩进行分析,包括求平均分、最高分、最低分等;对同一学期每个班的学生总成绩进行排序。l 数
4、据保存模块。将录入的学生基本信息和成绩以及修改后的数据记录以二进制文件的形式保存在磁盘指定位置。l 数据显示模块。将查询结果或者修改后的记录显示在屏幕上。三、 详细设计程序开始运行后,首先要显示主菜单,由用户选择相应的操作。用数字来代表不同的操作,其对应关系如下表所示:操作命令对应数字输入记录1删除记录2查询记录3修改记录4插入记录5数据分析6数据排序7数据保存8数据显示9退出程序01. 输入记录首先提示输入学号,输入后以回车符作为输入结束符;然后依次提示输入姓名,系别,班级,各科成绩等,每次输入均以回车符作为输入结束符。输入完一条完整的记录后,重复以上步骤;当所有记录输入完成,按“0”键退出
5、输入记录,显示主菜单。2. 删除记录首先将所有数据记录显示出来,然后提示用户选择需要删除的记录,“1”表示通过学号删除相应记录,“2”表示通过姓名删除相应记录。删除完成后提示删除成功,然后显示主菜单。3. 查询记录首先提示输入相应的关键字查询方式,“1”表示通过学号查询,“2”表示通过姓名查询,“3”表示通过系别查询,把该系所有学生记录查询出来,“4”表示通过班级查询,把该班所有学生记录查出来。然后输入需要查询记录的关键字,把相应的记录显示出来,然后显示主菜单。4. 修改记录首先将所有记录显示出来,输入需要修改的记录的学号,然后按照输入记录的操作录入修改后的数据,每次输入均以回车符作为结束符。
6、输入完成后将修改后的数据记录显示出来,然后显示主菜单。5. 插入记录当需要插入新的记录时,首先将所有记录显示出来,提示用户输入需要插入记录的位置,然后按照输入记录的操作录入一条新的记录,完成后将记录表显示出来,然后显示主菜单。6. 分析首先将记录表显示出来,按回车键后显示统计分析结果,包括每科不及格人数,平均成绩,最高分,最低分等信息。7. 排序首先将记录表显示出来,按回车键后按照总分名次从高到低的顺序进行排序显示,然后显示主菜单。8. 保存将全部数据记录以二进制文件的形式保存在指定的磁盘位置,然后显示主菜单。9. 显示将记录表显示出来,然后显示主菜单。0. 退出退出前如果数据记录有修改则询问
7、是否保存数据记录到文件,然后退出程序。四、 程序编制按照以上详细设计的思路进行程序设计,每个功能设计成一个子程序。各模块的程序流程如下:图1 主程序流程图2 输入记录流程图3 删除记录流程图4 查询记录流程图5 修改记录流程图6 插入记录流程图7 数据分析流程图8 数据排序流程图9 数据保存流程五源代码#include<stdio.h>#include<string.h>#include<stdlib.h>#define MAXN 100 /一个班最多的人数#define MAXM 2 /成绩的课程门数 int R;void input(); /1.学生成绩
8、新建void sort(); /2.学生成绩插入void load(); /3.学生成绩修改 void print(); /4.学生成绩删除void total(); /5.学生成绩统计void search(); /6.学生成绩查询void save(); /7.学生成绩保存void end(); /8.结束 struct studentchar name20; /保存全班姓名 char num12; /保存全班学号char man20; /保存全班性别float scoreMAXM; /保存全班所有课程成绩float sum; /保存全班每个人的总成绩 float avg; /保存每个人的
9、平均成绩; struct student sMAXN;struct http char subject20; /保存全班所有课程;struct http cMAXM;void main() /欢迎首界面int select,l; system("color fC"); printf("n"); printf("n"); printf("n"); printf("n"); printf(" ¥n"); printf(" * *n"); printf(&quo
10、t; * *n"); printf(" * 欢迎进入终极一班学生管理系统 *n"); printf(" * *n"); printf(" * 一 cf . *n"); printf(" * 甘总管的多塔生活 *n"); printf(" * *n"); printf(" * 凸-凸凸-凸凸-凸凸-凸凸-凸凸-凸凸-凸 *n"); printf(" ¥n"); printf(" v '''n"); pri
11、ntf(" ( o )( : )n"); printf(" () : ()() v ()n"); printf(" n"); printf("n"); printf("n"); printf(" 请按任意键进入下一界面n"); printf("-n"); system("pause"); system("color f2"); system("color f1"); system("co
12、lor f3"); system("color fE"); system("color fB"); system("color f5"); system("color f9"); system("color f6"); system("color f1"); system("color f3"); system("color fE"); system("color fB"); system("co
13、lor f5"); system("color f9"); system("color f6"); system("color f1"); system("color f3"); system("color f5"); system("color f9"); system("color f6"); system("color fD"); system("pause"); system("color
14、 fC"); system("cls"); /上面是第一个界面 while(1) system("cls"); printf(" *欢迎进入终极一班学生管理系统*n"); printf(" *n"); printf(" * 1.学生成绩新建 囧rz 欢 *n"); printf(" * :=>> 2.学生成绩插入 迎 *n"); printf(" * 3.学生成绩修改 来 *n"); printf(" * 4.学生成绩删除
15、到 *n"); printf(" * 5.学生成绩统计 英 *n"); printf(" * 6.学生成绩查询 雄 *n"); printf(" * 7.学生成绩保存 联 *n"); printf(" * 8.退出/撒拉嘿 盟 *n"); printf(" * ()()()()()() *n"); printf(" *n"); printf("n"); printf("n 请输入您的选择编号,回车键继续:n");printf(
16、" -n"); scanf("%d",&select); do if(select<1|select>8) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&select); l=select; while(l<1|l>8); switch(select) case 1:input();break; /1.学生成绩新建 case 2:sort(); break; /2.学生成绩插入 case 3:load(); break; /3.学生成绩修改
17、 case 4:print(); break; /4.学生成绩删除 case 5:total();break; /5.学生成绩统计 case 6:search();break; /6.学生成绩查询 case 7:save();break; /7.学生成绩保存 case 8: end();break; /8.结束 default:printf(" 请按相应数学选择系统功能:"); void input() /1学生成绩输入成绩模块 int i,j,b; float a=0; printf(" 请输入该班同学的人数:n"); printf(" 班同
18、学的人数在1%d之间:n",MAXN); scanf("%d",&R); do if(R<1|R>100) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&R); b=R; while(b<1|b>100); for(i=0;i<MAXM;i+) printf(" 请输入该班同学的第%d门课程名称为:n",(i+1); scanf("%s", &ci.subject); for(i=0;i<R
19、;i+) printf(" 请输入第%d个同学的姓名:n",(i+1); scanf("%s",&); printf(" 请输入第%d个同学的学号:n",(i+1); scanf("%s",&si.num); printf(" 请输入第%d个同学的性别(注:可以不详):n",(i+1); scanf("%s",&si.man); printf(" 请依次输入%d门学科的成绩:n",MAXM); for(j=0;j<
20、;MAXM;j+) printf(" 请输入课程%s的成绩为:n",cj.subject); scanf("%f",&si.scorej); a=a+si.scorej; si.sum=a; si.avg=si.sum/MAXM; a=0;void sort() /2学生成绩插入成绩模块int i,j,k,b;float a=0; printf(" 请输入要插入的学生的位置1%d号:n",R); printf(" 第几个学生的位置之后:n");scanf("%d",&k); do
21、 if(k<1|k>R) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&k); b=k; while(b<1|b>R);R=R+1;for(i=R;i>k;i-)strcpy(,);strcpy(si.num,si-1.num);strcpy(si.man,si-1.man);si.sum=si-1.sum;si.avg=si-1.avg;for(j=0;j<MAXM;j+) si.scorej=si-1.scorej;printf("
22、; 请输入第%d个同学的姓名:n",(k+1); scanf("%s",&); printf(" 请输入第%d个同学的学号:n",(k+1); scanf("%s",&sk.num); printf(" 请输入第%d个同学的性别(注:可以不详):n",(k+1); scanf("%s",&sk.man); printf(" 请依次输入%d门学科的成绩:n",MAXM); for(j=0;j<MAXM;j+) printf(
23、" 请输入课程%s的成绩为:n",&cj.subject); scanf("%f", &sk.scorej); a=a+sk.scorej; sk.sum=a; sk.avg=sk.sum/MAXM; void load() /3学生成绩修改int load1(); int load2(); int select,index,b; while(1) printf(" *n");printf(" * 1.按学号修改 * n"); printf(" * 2.按姓名修改 * n");
24、printf(" * 0.返回 * n"); printf(" * 请输入您的选择编号: * n"); printf(" *n");scanf("%d",&select); do if(select<0|select>2) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&select); b=select; while(b<0|b>2); switch(select) case 1:index=load
25、1(); break; case 2:index=load2();break; case 0:return; if(index!=-1) int i,j; float a=0,hMAXM;i=index;printf(" 请输入%d号的新学号: n",i+1); scanf("%s",&);printf(" 请输入%d号的新姓名: n",i+1); scanf("%s",&si.num); printf(" 请输入第%d个同学的性别(注:可以不详):n",(i+1)
26、; scanf("%s",&si.man); for(j=0;j<MAXM;j+) printf(" 请输入课程%s的成绩为:n",&cj.subject); scanf("%f",&hj); si.scorej =hj; a=a+si.scorej; si.sum=a; si.avg=si.sum/MAXM;printf(" 修改成功。n"); else printf("没有这个同学。n"); int load1() /按学号修改模块 int i; char s_
27、num12; printf(" 请输入要修改的学号:"); scanf("%s",&s_num); for(i=0;i<MAXN;i+)if(strcmp(si.num,s_num)=0) break; if(i<MAXN) return i; else return -1; int load2() /按姓名修改模块 int i; char s_name10;printf(" 请输入要修改的姓名:"); scanf("%s",&s_name); for(i=0;i<MAXN;i+)
28、if(strcmp(,s_name)=0) break; if(i<MAXN) return i; else return -1; void print() /4学生成绩删除int i,j,k,b;printf(" 请输入删除学生的位置1%d 号:n",R);scanf("%d",&k); do if(k<1|k>R) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&k); b=k; while(b<1|b>R);i=k-
29、1; for(i;i<R;i+)strcpy(,si+1.name);strcpy(si.num,si+1.num);strcpy(si.man,si+1.man);si.sum=si+1.sum;si.avg=si+1.avg;for(j=0;j<MAXM;j+) si.scorej=si+1.scorej;R=R-1;printf("删除成功! n");void total() /5.学生成绩统计int i,j;float aMAXM,b=0;printf("学号: 姓名: 性别: %s的分数: %s的分数: 总成绩: 平均成绩:n&
30、quot;,c0.subject,c1.subject); for(i=0;i<R;i+) printf("%s%11s%11s%14.2f%14.2f%14.2f%14.2fn",si.num, ,si.man,si.score0 ,si.score1,si.sum,si.avg); for(i=0;i<MAXM;i+) for(j=0;j<R;j+) b=b+sj.scorei; ai=b/R; b=0; for(i=0;i<MAXM;i+) printf(" 全班课程%s的平均分为:%f n",ci.subje
31、ct,ai); printf("排序完毕.n"); system("pause");void search() /6查询成绩模块 int search1(); int search2(); int select,index,b; while(1) printf(" *n");printf(" * 1.按学号查询 * n"); printf(" * 2.按姓名查询 * n"); printf(" * 0.返回 * n"); printf(" * 请输入您的选择编号:
32、* n"); printf(" *n");scanf("%d",&select); do if(select<0|select>2) printf(" 您输入有误,请重新输入,谢谢!n"); scanf("%d",&select); b=select; while(b<0|b>2); switch(select) case 1:index=search1(); break; case 2:index=search2();break; case 0:return; i
33、f(index!=-1) int i;printf(" *n");printf(" 学号:%s n", sindex.num); printf(" 姓名:%s n", );printf(" 性别:%s n", sindex.man);printf(" 总成绩:%f n", sindex.sum); printf(" 平均成绩:%f n", sindex.avg); for(i=0;i<MAXM;i+)printf(" 课程%s的成绩为:%
34、f n", ci.subject,sindex.scorei);printf(" *n"); else printf("没有这个同学。n"); int search1() /按学号查询模块 int i; char s_num12; printf(" 请输入要查询的学号:"); scanf("%s",&s_num); for(i=0;i<MAXN;i+)if(strcmp(si.num,s_num)=0) break; if(i<MAXN) return i; else return -
35、1; int search2() /按姓名查询模块 int i; char s_name10;printf(" 请输入要查询的姓名:"); scanf("%s",&s_name); for(i=0;i<MAXN;i+)if(strcmp(,s_name)=0) break; if(i<MAXN) return i; else return -1; void save() /7保存成绩模块 FILE *fp; int i,j,k=0; char filename20; printf("请输入文件名(请以 .txt
36、 结束): "); scanf("%s",filename); if(fp=fopen(filename, "w")=NULL) printf("打开文件失败.n"); return; fprintf(fp, "该班学生数和所修课程数分别为:%d,%dnn",R,MAXM);fprintf(fp, "该班所修的课程有:n");for(j=0;j<MAXM;j+)fprintf(fp, "课程%d:%sn",1+j,cj.subject);fprintf(fp,
37、 "下面是该班学生信息:nn"); for(i=0;i<R;i+) fprintf(fp, "学号:%s 姓名:%sn",si.num,); for(j=0;j<MAXM;j+) fprintf(fp, "%s:%5.2fn",cj.subject,sk.scorej); fprintf(fp, "学生总成绩:%5.2fn学生平均成绩:%5.2fnn",si.sum,si.avg);k+; fclose(fp); printf("nn 保存成功nnnn"); fclos
38、e(fp); printf("保存完毕.n"); void end() /8.结束 system("cls"); system("color f4"); printf("n"); printf("n"); printf("n"); printf("n"); printf(" ?n"); printf(" ?n"); printf("n"); printf(" ?n"); pri
39、ntf("n"); printf(" ?n"); printf("n"); printf(" ? n"); printf("n"); printf(" n"); printf("n"); printf(" ?n"); printf("n"); printf(" ?n"); printf("n"); printf(" n"); printf("n&q
40、uot;); printf(" ? n"); printf("n"); printf(" ?n"); printf("n"); printf(" ?n"); printf("n"); printf(" ? n"); printf("n"); printf("n"); printf("n"); printf("nn 谢谢您的使用。BYE!nnnnnnnn"); system(&q
41、uot;color f2"); system("color f1"); system("color f3"); system("color fE"); system("color fB"); system("color f5"); system("color f9"); system("color f6"); system("color f1"); system("color f3"); system(&q
42、uot;color fE"); system("color fB"); system("color f5"); system("color f9"); system("color f6"); system("color f1"); system("color f3"); system("color f5"); system("color f9"); system("color f6"); exit(0);六
43、测试调试就是在编写过程中,每完成一个小功能,就对程序编译运行,及时修改语法、结构等问题。程序使用Visual C+ 6.0的debug进行调试,程序执行过程一旦发现问题或者输出与预期不一致时,首先检查程序代码是否正确、是否完整的表达了程序设计算法;然后采用debug工具的Step Into、Step over、Step out、Run to Cursor等等常用调试步骤对程序执行过程进行跟踪、检查直到找出程序编写过程中存在的问题;最后对存在的问题进行改正,更改以后在此执行程序检查程序是否能够正常执行,输出结果是否与期望一致。现以调试程序查询功能中的按系查询子功能时发现的问题说明整个程序的调试过
44、程该程序的数据采用链表方式存储,数据输入、删除、查询、修改、添加、排序、统计、保存等操作都是通过指针对该数据链表进行操作。指针功能非常强大,但是又是比较危险的,稍不注意便会出现指针越界、空指针索引等非法操作。尽管对待指针操作已经是很小心,还是出现非法使用指针的问题。查询功能中的按系查询子功能代码编写如下:else if(select=3) /*按系查询*/stringinput(searchinput,15,"Input the existing department:");p=Locate(l,searchinput,"department");if(p)printheader();printdata(p);while (p->next
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于Measurement Studio的超声探伤虚拟仪器:设计创新与实践应用
- 2025年初中学业水平考试地理模拟试卷:乡土地理特色试题解析集
- 2025年社会工作者职业水平考试中级实务模拟试卷:社区社会工作服务项目设计试题
- 地理信息技术在2025年初中地理考试中的应用模拟试题解析
- 2025年初中学业水平考试地理模拟试卷:乡土地理特色知识竞赛试题及实战
- 2025年大学辅导员考试题库:学生职业生涯规划职业兴趣测试试题型
- 2025年消防执业资格考试题库(消防技术标准规范)消防设施操作规程消防应急预案试题
- 2025年社会工作者职业水平考试中级实务模拟试卷:社会工作心理干预效果评价研究试题
- 2025年小学语文毕业升学考试全真模拟卷(古诗词背诵默写试题)
- 2025年医保知识考试题库及答案(医保支付方式改革)试题
- 2025年社工招聘考试试题及答案
- 病理检查报告审核制度
- 《数据库系统概论》全套课件(南京农业大学)
- 广东省茂名市2023-2024学年高一上学期数学期中试卷(含答案)
- 《建筑工程设计文件编制深度规定》(2022年版)
- 山西建投集团考试真题
- JT-T-325-2018营运客运类型划分及等级评定
- JT-T-844-2012港口设施保安设备设施配置及技术要求
- 湘教版版八年级上册地理知识点复习总结
- 2069-3-3101-002WKB产品判定准则-外发
- 美国发布2024版《关键和新兴技术清单》(英)
评论
0/150
提交评论