




已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
学院课程设计报告 课程名称: 学 院: 专业班级: 姓 名: 学 号: 指导教师: 完成时间: 报告成绩: 评阅意见: 评阅老师: 评阅时间:学生成绩管理系统C语言课程设计一、 设计要求1) 收集资料,全面分析课题,分解问题,形成中体编程思路;2) 深入分析各个小问题,编写个部分程序模块;3) 对于设计中用到的关键函数,要联系实际 问题进行具体介绍;4) 上机调试,确保程序能正确运行;二、 设计目的:1) 通过设计,了解C语言的实际运用,加强对C语言的重视;2) 通过设计,强化C语言的基本运用及C语句的准确掌握;3) 通过设计,掌握设计软件一般方法,了解软件设计的一般思路;4) 通过设计,锻炼撰写报告的水平。三、 课题分析:编写一个学生成绩管理系统的C程序,包括以下功能:1) 学号段查询功能;2) 输入功能;3) 添加功能、修改功能;4) 成绩处理功能等5) 可实现数据输入、数据显示、数据插入、数据访问、数据保留、数据更新等存储功能,以及各学科平均分、最高分、最低分的提取等数据处理功能。该程序运行相对只能化,可通过学号比较来插入数据、根据姓名查找数据以及更新数据。其操作简单,查找方便,修改迅速,普遍适合学校学生成绩管理,可大大减少人工管理的工作量,提高工作效率。四、 定义数据结构及相关解释:1) 在学生成绩管理系统中,各模块功能系统之间构成的数据结构关系为非线性数据结构的树结构。2) 树结构:每一个结点只有一个前件,称为父结点。没有前件的结点只有一个,称为树的根结点,简称树的根。在学生成绩管理系统中的数据结构图中“图书馆管理程序”为根;在树结构中,每一个结点都可以有多个后件,他们都称为该结点的子结点,没有后件的结点称为叶子。例如,在学生成绩管理系统中的数据结构图中“查看数据”、“ 通过比较学号来插入数据”、“ 通过姓名查找查看数据”、“ 通过姓名查找来更新数据”、“ 保留数据”以及求各学科的“平均分、最高分、最低分”为“学生成绩管理系统”的子结点,也是该树结构的叶子。五、 软件的模块划分:根据对学生成绩管理系统功能分析的情况,可将学生成绩管理系统做如下模块划分:1) main( ) 主函数 - 学生成绩管理系统程序主函数;2) print( ) 打印函数 - 设置学生成绩管理系统界面;3) cin( ) 数据输入函数 - 数据多格式输入;4) cindata( ) 其他数据继续输入函数;5) lookdata( ) 查看数据函数 - 查看已保存的数据;6) insert( ) 插入数据的函数 - 通过比较学号来插入数据;7) find( ) 查看数据的函数 - 通过姓名查找查看数据;8) update( ) 更新数据的函数 - 姓名查找来更新数据;9) save( ) 保留数据函数 - 储存处理后的数据;10) caverage(); 求各学生语文平均分、最高和最低分成绩的函数;11) maverage(); 求各学生数学平均分、最高和最低分成绩的函数;12) eaverage(); 求各学生英语平均分、最高和最低分成绩的函数;13) comaverage(); 求各学生计算机平均分、最高和最低分成绩的函数 注:(2)(13)为自定义功能函数,通过main()主函数调用实现其功能。六、 程序流程设计:根据学生成绩管理系统功能分析绘制流程图:初始界面开始passwords功能选择用户信息输入其他数据插入数据查找查看数据查找更新数据保留数据显示或打印数据求学生语文平均分求学生计算机平均分求学生数学平均分求学生英语平均分空操作返回主程序流程图,学生成绩管理系统操作流程。其他数据输入姓名学号性别成绩语文数学英语计算机其他数据输入过程选择继续输入返回注:其他功能的流程图可参照“其他数据输入”的流程图绘制。七、 各功能模块编写内容详细情况及调试:1) 数据类型的定义。在定义数据类型时,由于学生成绩管理信息需要由不同类型的数据反映出来。如:姓名、性别都需要用char型数据,而学号和成绩则需要用int型数据,并且每位同学的以上信息都需要一次性输入,所以采用结构体类型定义。如:typedef struct student /*定义结构体*/ char nameMAX;- 定义char型姓名int numMAX;- 定义int型学号char sexMAX;- 定义char型性别int chinese;- 定义int型语文成绩int mathematic;- 定义int型数学成绩int english;- 定义int型英语成绩int computer;- 定义int型计算机成绩struct student *next;- 结构体指针 stu;说明:在定义结构体类型和变量时,可采用先定义结构体类型再定义结构提变量,也可同时定义结构体类型和变量,还可以直接定义结构提变量。上例中的定义方式为同时定义结构体的类型和变量。结构体定义的格式如下:struct 结构体名 类型标识符 成员名;2) 函数的命名和库函数的使用。A. 函数命名是遵循标识符的命名规则,并且要尽量做到顾名思义的效果。如:lookdata( )为查看数据函数。B. 库函数使用时要提前声明(#include 等)用到的函数必须包括在库函数或者已自定义的函数中,否则编译出错。C. 函数调用时要注意形参和实参数据类型的对应。3) 函数结构和功能实现。A. 数据输入函数“cin( )”B. 查看数据函数“lookdata( )” C. 插入数据的函数“insert( )”D. 查看数据的函数“find( )”E. 更新数据的函数“update( )”F. 保留数据函数“save( )” 注:以上的六个功能函数为学生成绩管理系统的输入、读取、修改等主要功能函数,其中主要运用字符串比较,定义指针变量,输入输出等多种函数和操作实现其对外界输入内容进行处理功能以及防止出错的备份功能。G. 管理系统中的各个模块函数的功能实现基本都依靠与以上三中函数类似的编辑方法编写。主要通过以下结构实现对应功能。 for循环结构 对使用者输入内容与内部资料内容进行核对。 switch选择结构 对使用者所选择的项目进行判断并调用对应的函数。 if-else选择结构 配合for循环核对内容的正确与否选择对应的操作。 while 、do-while循环结构 条件判断并进行对应的操作。H. 具体功能函数源程序的编辑内容见后文的图书馆管理系统源程序。八、 源程序内容及调试结果。1) 源程序(原始密码是123456):#includestdio.h#includestddef.h#includestddef.h#includestring.h#define MAX 10typedef struct student /*定义结构体*/ char nameMAX; /*姓名*/ int numMAX; /* 学号*/ char sexMAX; /*性别*/ int chinese; /*语文*/ int mathematic; /* 数学*/ int english; /*英语*/ int computer; /*计算机*/ struct student *next; /*结构体指针*/ stu;stu *head; /*头指针*/void print() /*显示或打印函数*/ system(cls); printf(tttScore Manage Systemn); /*成绩管理系统*/ printf(Enter Recordt); /*输入数据*/ printf(Displayt); /*显示*/ printf(Insertt); /*插入数据*/ printf(Questt); /*访问数据*/ printf(Updatet); /*以前数据*/ printf(Savet); /*保留数据*/ printf(Fresht); /*更新数据*/ printf(Chinese Averaget); /*语文平均成绩*/ printf(Math Averaget); /*数学平均成绩*/ printf(English Averaget); /*英语平均成绩*/ printf(Computer Averaget); /*计算机平均成绩*/ printf(Quittn); /*退出*/ void cin(stu *p1) /*输入相关数据的函数*/ printf(Enter name:n); scanf(%s,&p1-name); printf(Enter num:n); scanf(%d,&p1-num); printf(Enter sex:n); scanf(%s,&p1-sex); printf(Enter score:n); printf(Enter chinese:n); scanf(%d,&p1-chinese); printf(Enter math:n); scanf(%d,&p1-mathematic); printf(Enter English:n); scanf(%d,&p1-english); printf(Enter Computer:n); scanf(%d,&p1-computer); stu *cindata() /*其他数据是否继续输入的函数*/ stu *p1,*p2; int i=1; char ch; p1=(stu *)malloc(sizeof(stu); head=p1; while(i) cin(p1); printf(Do you Want to Continue?yes or no); /*是否继续输入数据*/ ch=getchar(); ch=getchar(); if(ch=n|ch=N) i=0; p1-next=NULL; else p2=p1; p1=(stu *)malloc(sizeof(stu); p2-next=p1; return(p1-next);stu *lookdata(stu *p1) /*查看数据的函数*/ while(p1!=NULL) printf(Num:%dt,p1-num); printf(Name:%st,p1-name); printf(Sex:%st,p1-sex); printf(n); printf(Chinese:%dt,p1-chinese); printf(Math:%dt,p1-mathematic); printf(English:%dt,p1-english); printf(Computer:%dt,p1-computer); printf(n); p1=p1-next; return p1; void insert() /*通过比较学号来插入数据的函数*/ stu *p1,*p3,*p2; char ch; p1=head; p3=(stu *)malloc(sizeof(stu); p3-next=NULL; if(head=NULL) head=p3; return; cin(p3); while(p1!=NULL&(p1-numnum) /*通过学号的比较来插入*/ p2=p1;p1=p1-next; if(p2=head) p3-next=head; head=p3; return; p3-next=p1; p2-next=p3;find(stu *p2) /*通过姓名查找查看数据的函数*/ char name20; int b=0; printf(Enter the name of the student you want to find:); /*通过姓名查看*/ scanf(%s,name); while(p2!=NULL) if(strcmp(name,p2-name)=0) printf(The data you want has be foundn); printf( Name:%st,p2-name); printf(Num:%dt,p2-num); printf(sex%st,p2-sex); printf(n); printf(Chinese:%dt,p2-chinese); printf(Math:%dt,p2-mathematic); printf(English:%dt,p2-english); printf(Computer:%dt,p2-computer); printf(n); b=1; else if(b=0) printf(sorry not find data!); p2=p2-next; if(b=1) print(); printf(Find onen); else print(); printf(Not findn); void caverage() /*求各学生语文平均分、最高和最低分成绩的函数*/ stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf(not data!); else for(i=0;p1!=NULL;i+,p1=p1-next)sum+=p1-chinese; aver=sum/i; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(maxchinese) max=p1-chinese; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-chinese) min=p1-chinese; printf(Chinese Average:%f,aver); printf(Chinese Max:%f,max); printf(Chinese Min:%f,min);void maverage() /*求各学生数学平均分、最高和最低分成绩的函数*/ stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf(not data!); else for(i=0;p1!=NULL;i+,p1=p1-next)sum+=p1-mathematic; aver=sum/i; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(maxmathematic) max=p1-mathematic; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-mathematic) min=p1-mathematic; printf(Mathe Average:%f,aver); printf(Mathe Max:%f,max); printf(Mathe Min:%f,min);void eaverage() /*求各学生英语平均分、最高和最低分成绩的函数*/ stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf(not data!); else for(i=0;p1!=NULL;i+,p1=p1-next)sum+=p1-english; aver=sum/i; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(maxenglish) max=p1-english; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-english) min=p1-english; printf(English Average:%f,aver); printf(English Max:%f,max); printf(English Min:%f,min);void comaverage() /*求各学生计算机平均分、最高和最低分成绩的函数*/ stu *p1; int i; float max=0.0,min=200.0; float sum=0.0,aver=0; p1=head; if(p1=NULL) printf(not data!); else for(i=0;p1!=NULL;i+,p1=p1-next)sum+=p1-computer; aver=sum/i; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(maxcomputer) max=p1-computer; p1=head;for(i=0;p1!=NULL;i+,p1=p1-next) if(minp1-computer) min=p1-computer; printf(Computer Average:%f,aver); printf(Computer Max:%f,max); printf(Computer Min:%f,min); update(stu *p2) /*通过姓名查找来更新数据*/ char name10; /*p2为指向结构体struct student的指针*/ int b=0; printf(Enter The Name); /*输入姓名*/ scanf(%s,name); while(p2!=NULL) if(strcmp(name,p2-name)=0) printf(Find you datan); scanf(Name:%s,p2-name); scanf(Num:%s,p2-num); scanf(Sex:%s,p2-sex); scanf(Chinese:%d,p2-chinese); scanf(Math:%d,p2-mathematic); scanf(english:%d,p2-english); scanf(Computer:%d,p2-computer); printf(Success!); b=1; else if(b=0) printf(Sorry not Find data!); p2=p2-next; if(b=0) print(); printf(Sorry not Find data!); else print(); printf(Finish!); save(stu *p2) /*保留数据函数*/ FILE *fp; char file10; printf(Enter file name); /*输入文件名*/ scanf(%s,file); fp=fopen(file,w); while(p2!=NULL) fprintf(fp,%s,p2-name); fprintf(fp,%s,p2-num); fprintf(fp,%s,p2-sex); fprintf(fp,%d,p2-chinese); fprintf(fp,%d,p2-mathematic); fprintf(fp,%d,p2-english); fprintf(fp,%d,p2-computer); p2=p2-next; fclose(fp);char password7=123456; /*定义初始密码*/void main() /*主函数*/ int choice; stu *p2; char s8; int flag=0,i; /*标志项*/ int n=3; do printf(Enter password:n); scanf(%s,s); if(!strcmp(s,password) /*进行密码匹配验证*/ printf(PASSnnn); flag=1; break; else printf(Error Enter again:n); n-; while(n0); if(!flag) printf(you have Enter 3 times!); /*输入密码超过了3次!*/ exit(0); /*自动退出*/ /*密码验证成功后进入的界面*/ printf(tttn); /*操作界面*/ printf(ttWelcom to the Misn); printf(Author:-tClass:-tNum:-n); /*作者,班级和号码*/ printf(Adress:HGn); /*地址*/ printf(%n); printf(ttEnter OP:n); printf(nnnn); printf(=tt=n); printf(=tt=n); printf(ttEnter the MIS yes or non); /*问进入系统与否*/ scanf(%d,&choice); if(choice=n|choice=N) exit(1);print(); while(1) printf(Enter choice:); scanf(%d,&i); if(i13) printf(Enter num from 1 to 13:n); /*再从1-13中进行选择*/ exit(1); switch(i) case 1: p2=cindata(); /*其他数据是否继续输入的函数*/ break; case 2: p2=lookdata(head); /*查看数据的函数*/ break; case 3: insert(); /*通过比较学号来插入数据的函数*/ break; case 4: find(head); /*通过姓名查找查看数据的函数*/ break; case 5: update(head); /*通过姓名查找来更新数据*/ break; case 6: save(head); /*保留数据函数*/ break; case 7: print(); /*显示或打印函数*/ break; case 8: caverage(); /*求各学生语文平均分、最高和最低分成绩的函数*/ break; case 9: maverage(); /*求各学生数学平均分、最高和最低分成绩的函数*/ break; case 10: eaverage(); /*求各学生英语平均分、最高和最低分成绩的函数*/ break; case 11: comaverage(); /*求各学生计算机平均分、最高和最低分成绩的函数*/ break; case 12: ; /*空操作*/ case 13: exit(1); /*退出*/ break; scanf(%d,&i);2) 程序运行过程:A. TC的调试和运行:TC程序在运行前首先要设置其路径,这样才能调用库函数,一般TC默认的路径为C:TC,但如果用户拷贝的TC没有装载在C盘下,则TC将无法寻找到路径,必须重新调试其路径。调试方法如下(以装载在C盘为例):打开TC编辑页面,找到Options选项,将Directories中的所有C:更改为G:,然后点Save options.修改后TC就可以成功的调用库函数文件了。B. 程序模块化检验:根据之前需要,将程序划分为多个模块,然后将每个模块单独编写,每个模块可以单独编写一个程序来检测。例如:在学生成绩管理系统中的“学生成绩输入模块”可根据以下方式,先单独定义一个main( )函数,看其是否符合要求的功能。#includestdio.h#includestddef.h#includestddef.h#includestring.h#define MAX 10typedef struct student char nameMAX; int numMAX; char sexMAX; int chinese; int mathematic; int english; int computer; struct student *next; stu=kang,01,g,61,71,81,91,wang,02,b,62,72,82,92;main()struct student *p;for(p=stu;pname,p-num,p-sex,p-chinese,p-mathematic,p-english,p-computer);注:功能调试时多实验几个数值,以免其通用性不强。C. 程序运行结果:注:系统运行输入密码。当输入的密码为123456(初始密码)与系统中存储的一致时,系统直接进入开始界面:进入后就可输入拥护的信息,包括班级
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 基于2025年电商平台的社交电商板块社群营销策略研究报告
- 法律职业资格考试客观题(试卷一)试卷及答案指导2025年
- 2025年健康素养66条知识竞赛题库及答案
- 2025年教师招聘之《幼儿教师招聘》题库高频难、易错点100题模拟试题及参考答案详解(满分必刷)
- 教师招聘之《小学教师招聘》试题(得分题)含答案详解【夺分金卷】
- 教师招聘之《幼儿教师招聘》考前冲刺试卷及1套完整答案详解
- 矿业安全生产会议记录
- 教师招聘之《幼儿教师招聘》考试黑钻押题及答案详解(各地真题)
- 教师招聘之《小学教师招聘》考前冲刺练习试题及参考答案详解【突破训练】
- 2025年教师招聘之《小学教师招聘》题库高频难、易错点100题模拟试题及参考答案详解【典型题】
- 2025-2030中国红景天苷行业市场发展趋势与前景展望战略研究报告
- 签约全屋定制合同协议
- 基于多方法融合构建麻醉专科护士核心能力评价指标体系的探索与实践
- 中建八局如何做好转型升级下的技术标编制工作
- 二年级上册体育与健康课教案
- 2025年铁路货装值班员(高级)职业技能鉴定参考试题库(含答案)
- 转让叉车协议书模板
- 2025-2030中国纳米气泡发生器行业市场发展趋势与前景展望战略研究报告
- (高清版)DB11∕T2279-2024社会单位消防安全评估规范
- 语文-云南省师范大学附属中学2025届高三下学期开学考试试题和答案
- 北京一年级数学试卷
评论
0/150
提交评论