收藏 分销(赏)

教务信息管理系统课程设计报告.docx

上传人:人****来 文档编号:4185822 上传时间:2024-08-12 格式:DOCX 页数:19 大小:172.43KB 下载积分:8 金币
下载 相关 举报
教务信息管理系统课程设计报告.docx_第1页
第1页 / 共19页
教务信息管理系统课程设计报告.docx_第2页
第2页 / 共19页


点击查看更多>>
资源描述
《高级语言程序设计》课程设计 教务信息管理系统 题 目: 班 级: 软件R7班 学生学号: 5 学生姓名: 麦建波 指导老师: 姚金涛 提交时间: 5月6日 华南农业大学 软件学院 教务信息管理系统 1. 系统分析 1.1 问题描述 本程序为教务信息管理系统,通过输入学生有关信息,对数据进行处理和记录,并按需要输入记录处理后数据到文献中。 1.2 系统功能 (1)录入如下信息: 学生基本信息:如学号、姓名、性别、年龄、宿舍号码、电话号码等; 课程基本信息:课程编号、课程名称、考试成绩、平时成绩、综合成绩、 学分、重修否等。假如重修,需要考虑重修学期、重修成绩,并且要考虑多次重修状况。 (2)录入选课信息 (3)录入学生成绩 (4)按班记录学生选课状况及考试成绩 (5)按课程记录学生名单及考试成绩 (6)记录并输出每个同学已修学分及不及格课程 1.3 功能需求描述: (1)加载学生信息及其课程成绩:从文献录入学生基本资料和课程状况,并覆盖原有数据。 (2)新增学生信息及其课程成绩:按规定录入学生基本资料和课程状况,通过提醒信息逐渐操作。 (3)按班记录学生选课状况及考试成绩:根据录入数据,以班为单位逐一输出选课状况及对应成绩。 (4)按课程记录学生名单及考试成绩:按提醒输入课程编号,查询对应课程学生名单及其成绩。 (5)记录并输出每个同学已修学分及不及格课程:根据录入数据进行记录,输出所有学生已修学分及不及格课程名称。 (6)保留学生信息及其课程成绩并退出:将目前学生基本资料和课程状况保留到文献,并覆盖原有文献。 1.4 开发平台及工具简介 (1)硬件环境: u 处 理 器:Intel Pentium 166或更高 u 内 存:32MB以上 u 硬盘空间:2G以上 u 显 卡:SVGA显示适配器 (2)软件环境: u 操作系统:Windows98/Me//XP//Vista/7/8等 2. 系统设计 2.1 系统总体构造设计 教务信息管理系统 保留学生信息及其课程成绩并退出 记录学生已修学分及不及格课程 按课程记录学生名单及考试成绩 按班记录学生选课状况及考试成绩 新增学生信息及其课程成绩 加载学生信息及其课程成绩 2.2 系统各个功能模块设计 (1) 加载成功显示有关信息,并提醒加载学生总数 系统自动从根文献夹读取文献”stu.txt”,根据程序环节将学生信息输入到程序 加载学生信息及其课程成绩 (2) 学生学号输入“0”返回到主界面 在已经有加载数据基础上新增学生,根据提醒信息依次将学生信息输入到程序 新增学生信息及其课程成绩 (3) 输出完毕后自动返回到主界面继续工作 基于目前数据,按班级R1~R10分类记录并输出学生所有信息到屏幕和文献”case3.txt” 按班记录学生选课状况及考试成绩 (4) 输入课程编号,查找出已修该课程所有学生并输出其成绩及重修与否到屏幕和文献”case4.txt” 课程编号输入“0”返回到主界面 按课程记录学生名单及考试成绩 (5) 基于目前数据,将每位学生已修课程学分总和及不及格课程输出到屏幕和文献”case5.txt” 输出完毕后自动返回到主界面继续工作 记录学生已修学分及不及格课程 (6) 保留成功显示有关信息,并提醒保留学生总数,最终退出程序 将目前数据以与加载相似格式输出到文献”stu.txt”,并覆盖原本存在该文献 保留学生信息及其课程成绩并退出 2.3 数据构造设计 2.3.1学生信息数据构造 typedef struct student { int age,sub,cla; //年龄,选课数量,班级 double poi; //已修学分 char stun[15],name[30],sex[5],dorn[10],phon[20]; //学号,姓名,性别,宿舍号码,短号电话号码 course les[10]; //课程信息 struct student*next; }student; 2.3.2课程信息数据构造 typedef struct course { char lessonn[15],lessonname[50],re[5]; //课程编号,课程名称,与否重修 double textmark,formalmark,mark,point; //考试成绩,平时成绩,综合成绩,学分 restudy res[5]; //重修状况 int restime; //重修次数 }course; 2.3.3重修状况数据构造 typedef struct restudy { int term; //重修学期 double resmark; //重修分数 }restudy; 2.4 界面设计 程序界面应遵照简洁美观、以便使用原则。 2.4.1主界面 充足考虑界面易于操作系统需求,用printf语句构造简朴文字界面,详细主界面设计效果如图所示。 2.4.2新增信息界面 根据有关文字提醒,顾客输入对应信息。 3. 系统实现 基于系统需求分析与系统总体设计成果,本系统采用Code::Blocks12.11软件平台基于C语言实现各模块功能,下面按照模块功能划分来分别论述系统详细设计和实现过程。 3.1头文献: #include <stdio.h> #include <stdlib.h> #include <string.h> 3.2主界面模块 功能:功能选择界面 输入:顾客选择功能选项编号 处理:根据顾客选项跳转到有关功能函数 输出:有关功能函数处理或显示界面 程序清单: student *insstu(); //加载学生信息及其课程成绩 student *inspoint(student *head,student *stud); //插入链表结点 void clalesmark(student *head); //按班记录学生选课状况及考试成绩 void lesstumark(student *head); //按课程记录学生名单及考试成绩 void pointfail(student *head); //记录并输出每个同学已修学分及不及格课程 student *adds(student *hd); //新增学生信息及其课程成绩 student *savestu(student *head); //保留学生信息及其课程成绩 int main(void) { student *head,*p; int num,n; int size=sizeof(struct student); head=NULL; printf("\t\t*****************************欢迎使用教务信息管理系统*****************************"); do { printf("\n\t\t* ------------------------------------请选择------------------------------------ *\n"); printf("\t\t* 1、加载学生信息及其课程成绩\t\t\t2、新增学生信息及其课程成绩 *\n"); printf("\t\t* 3、按班记录学生选课状况及考试成绩\t\t4、按课程记录学生名单及考试成绩 *\n"); printf("\t\t* 5、记录并输出每个同学已修学分及不及格课程\t6、保留学生信息及其课程成绩并退出*\n"); printf("\t\t* -----------------------------------0、退出------------------------------------ *\n\n"); fflush(stdin); //清除缓冲区 scanf("%d",&n); switch(n) { case 1:head=insstu();break; case 3:clalesmark(head);break; case 4:lesstumark(head);break; case 5:pointfail(head);break; case 2:head=adds(head);break; case 6:savestu(head);break; default :break; } }while(n!=0&&n!=6); printf("\n\t\t* ----------------------------------!谢谢使用!---------------------------------- *\n"); return 0; } 3.3加载信息模块 功能:从根文献夹加载记录学生信息文献 输入:无 处理:将所有学生信息形成链表 输出:加载成功状况 程序清单: student *insstu() { student *p,*hd,*pt; int i,j,n=0; FILE *fp; fp = fopen( "stu.txt" , "r" ); //从根目录读取文献 int size=sizeof(student); hd=NULL; while(1) { p=(student *)malloc(size); fscanf(fp,"%s",&p->stun); //读取学号 if(strcmp(p->stun,"0")==0)break; //学号为0返回 fscanf(fp,"%d",&p->cla); //读取班级 fscanf(fp,"%s",&p->name); //读取姓名 fscanf(fp,"%s",&p->sex); //读取性别 fscanf(fp,"%d",&p->age); //读取年龄 fscanf(fp,"%s",&p->dorn); //读取宿舍号码 fscanf(fp,"%s",&p->phon); //读取短号电话号码 p->sub=0;p->poi=0; for(i=p->sub;i<=10;i++) { fscanf(fp,"%s",&p->les[i].lessonn); //读取课程编号 if(strcmp(p->les[i].lessonn,"0")==0)break; //课程编号为0返回 fscanf(fp,"%s",&p->les[i].lessonname); //读取课程名称 fscanf(fp,"%lf",&p->les[i].textmark); //读取考试成绩 fscanf(fp,"%lf",&p->les[i].formalmark); //读取平时成绩 fscanf(fp,"%lf",&p->les[i].mark); //读取综合成绩 fscanf(fp,"%lf",&p->les[i].point); //读取学分 p->poi+=p->les[i].point; //将该课程学分加入已修总学分 fscanf(fp,"%s",&p->les[i].re); //读取与否重修 if(strcmp(p->les[i].re,"是")==0) { fscanf(fp,"%d",&p->les[i].restime); //读取重修次数 for(j=0;j<p->les[i].restime;j++) { fscanf(fp,"%d",&p->les[i].res[j].term); //读取重修学期 fscanf(fp,"%lf",&p->les[i].res[j].resmark); //读取重修成绩 } } p->sub++; } n++; if(n==1) { hd=p;pt=p; } else { pt->next=p;pt=p; } } pt->next=NULL; printf("加载学生数据成功!共加载%d位学生信息\n",n); return hd; } 3.4新增信息模块 功能:增长学生,并完整录入有关个人信息及选课信息 输入:学生信息 处理:将所得学生信息插入链表 输出:无 程序清单: student *adds(student *hd) { student *p,*q,*r; int i,j; int size=sizeof(student); while(1) { p=(student *)malloc(size); //hd=inspoint(hd,p); //p->next=NULL; printf("请输入学号(12位数字,返回请输入0):"); scanf("%s",&p->stun); if(strcmp(p->stun,"0")==0)break; printf("请输入班级号(软件R( )班):"); scanf("%d",&p->cla); printf("请输入姓名:"); scanf("%s",&p->name); printf("请输入性别:"); scanf("%s",&p->sex); printf("请输入年龄:"); scanf("%d",&p->age); printf("请输入宿舍号码(5位数字):"); scanf("%s",&p->dorn); printf("请输入电话号码(短号):"); scanf("%s",&p->phon); p->sub=0;p->poi=0; for(i=p->sub;i<=10;i++) { printf("请输入课程编号(6位数字,返回请输入0):"); scanf("%s",&p->les[i].lessonn); if(strcmp(p->les[i].lessonn,"0")==0)break; printf("请输入课程名称:"); scanf("%s",&p->les[i].lessonname); printf("请输入考试成绩:"); scanf("%lf",&p->les[i].textmark); printf("请输入平时成绩:"); scanf("%lf",&p->les[i].formalmark); printf("请输入综合成绩:"); scanf("%lf",&p->les[i].mark); printf("请输入学分:"); scanf("%lf",&p->les[i].point); p->poi+=p->les[i].point; printf("与否需要重修(输入“是,否”,):"); scanf("%s",&p->les[i].re); if(strcmp(p->les[i].re,"是")==0) { printf("请输入重修次数:"); scanf("%d",&p->les[i].restime); for(j=0;j<p->les[i].restime;j++) { printf("请输入重修学期:"); scanf("%d",&p->les[i].res[j].term); printf("请输入重修成绩:"); scanf("%lf",&p->les[i].res[j].resmark); } } p->sub++; } hd=inspoint(hd,p); //插入一种新结点以继续增长学生人数 p->next=NULL; } system("cls"); //清屏 return hd; } 3.5按班级记录模块 功能: 按班级有序地查看学生状况 输入:无 处理:按班级R1~R10分类记录学生信息 输出:输出学生所有信息到屏幕和文献”case3.txt” 程序清单: void clalesmark(student *head) //同步输出数据到屏幕和文献 { int i,j,k; student *s; FILE *fp; fp = fopen( "case3.txt" , "w" ); //输出文献到根目录 if(head==NULL) {fprintf(fp,"没有信息。\n");printf("没有信息。\n");} else { fprintf(fp," 学号 姓名 性别 年龄 宿舍号 电话号码 课程编号 课程名称 平时成绩 考试成绩 综合成绩 学分 与否重修 重修次数 重修状况\n"); printf(" 学号 姓名 性别 年龄 宿舍号 电话号码 课程编号 课程名称 平时成绩 考试成绩 综合成绩 学分 与否重修 重修次数 重修状况\n"); printf("-----------------------------------------------------------------------------------------------------------------------------------------------------------------\n"); fprintf(fp,"-----------------------------------------------------------------------------------------------------------------------------------------------------------------\n"); for(i=1;i<=10;i++) { fprintf(fp,"软件R%d班:\n",i);printf("软件R%d班:\n",i); s=head; while(s!=NULL) { if(s->cla==i) { fprintf(fp,"%13s %8s %s %d%9s%10s\n",s->stun,s->name,s->sex,s->age,s->dorn,s->phon); printf("%13s %8s %s %d%9s%10s\n",s->stun,s->name,s->sex,s->age,s->dorn,s->phon); for(j=0;j<s->sub;j++) { fprintf(fp," %s %12s %5.1lf %5.1lf %5.1lf %3.1lf %s",s->les[j].lessonn,s->les[j].lessonname,s->les[j].formalmark,s->les[j].textmark,s->les[j].mark,s->les[j].point,s->les[j].re); printf(" %s %12s %5.1lf %5.1lf %5.1lf %3.1lf %s",s->les[j].lessonn,s->les[j].lessonname,s->les[j].formalmark,s->les[j].textmark,s->les[j].mark,s->les[j].point,s->les[j].re); if(strcmp(s->les[j].re,"是")==0) { fprintf(fp," %d ",s->les[j].restime);printf(" %d ",s->les[j].restime); for(k=0;k<s->les[j].restime;k++) { fprintf(fp,"/第%d次:第%d学期,%.1lf分/",k+1,s->les[j].res[k].term,s->les[j].res[k].resmark); printf("/第%d次:第%d学期,%.1lf分/",k+1,s->les[j].res[k].term,s->les[j].res[k].resmark); } } fprintf(fp,"\n");printf("\n"); } } s=s->next; } } } } 3.6按课程记录模块 功能: 按课程查看已修该课学生成绩状况 输入:课程编号 处理:逐一学生查找与否已修该课程 输出:输出学生成绩状况到屏幕和文献”case4.txt” 程序清单: void lesstumark(student *head) { int i; char lessonn[15]; student *s; FILE *fp; fp = fopen( "case4.txt" , "w" ); if(head==NULL) {fprintf(fp,"没有信息。\n");printf("没有信息。\n");} else { while(1){ printf("请输入课程编号(返回请输入0):"); scanf("%s",&lessonn); if(strcmp(lessonn,"0")==0)break; fprintf(fp,"\n\t\t 课程名称 学号 姓名 平时成绩 考试成绩 综合成绩 学分 与否重修\n"); printf("\n\t\t 课程名称 学号 姓名 平时成绩 考试成绩 综合成绩 学分 与否重修\n"); fprintf(fp,"\t\t--------------------------------------------------------------------------------\n"); printf("\t\t--------------------------------------------------------------------------------\n"); s=head; while(s!=NULL) { for(i=0;i<s->sub;i++) { if(strcmp(s->les[i].lessonn,lessonn)==0) //查找该学生与否已修该课 { fprintf(fp,"\t\t%12s %13s %8s %5.1lf %5.1lf %5.1lf %3.1lf %s\n",s->les[i].lessonname,s->stun,s->name,s->les[i].formalmark,s->les[i].textmark,s->les[i].mark,s->les[i].point,s->les[i].re); printf("\t\t%12s %13s %8s %5.1lf %5.1lf %5.1lf %3.1lf %s\n",s->les[i].lessonname,s->stun,s->name,s->les[i].formalmark,s->les[i].textmark,s->les[i].mark,s->les[i].point,s->les[i].re); break; } } s=s->next; } fprintf(fp,"\n"); printf("\n"); } } } 3.7输出已修学分及不及格课程模块 功能: 查看所有学生已修学分及不及格课程 输入:无 处理:从头到尾检索每个学生已修学分及不及格课程 输出:输出所有学生已修学分及不及格课程到屏幕和文献”case5.txt” 程序清单: void pointfail(student *head) { int i; char lessonn[15]; student *s; FILE *fp; fp = fopen( "case5.txt" , "w" ); if(head==NULL) {fprintf(fp,"没有信息。\n");printf("没有信息。\n");} else { fprintf(fp,"\t\t 学号 姓名 班级 已修学分 不及格课程\n");printf("\t\t 学号 姓名 班级 已修学分 不及格课程\n"); fprintf(fp,"\t\t----------------------------------------------------------------------\n");printf("\t\t----------------------------------------------------------------------\n"); s=head; while(s!=NULL) { fprintf(fp,"\t\t%11s %8s %d %.1lf ",s->stun,s->name,s->cla,s->poi); printf("\t\t%11s %8s %d %.1lf ",s->stun,s->name,s->cla,s->poi); for(i=0;i<s->sub;i++) { if(s->les[i].mark<60) {fprintf(fp,"%s ",s->les[i].lessonname);printf("%s ",s->les[i].lessonname);} } fprintf(fp,"\n");printf("\n"); s=s->next; } } } 3.8保留信息模块 功能:保留目前学生信息 输入:无 处理:将原有学生信息及新增学生信息写出到根目录文献,并覆盖本来文献 输出:保留成功状况 程序清单: student *savestu(student *head) { student *p; int i,j,n=0; FILE *fp; fp = fopen( "stu.txt" , "w" ); //写出到根文献夹文献,并覆盖原有文献 p=head; while(p!=NULL) { fprintf(fp,"%s\n",p->stun); if(strcmp(p->stun,"0")==0)break; fprintf(fp,"%d\n",p->cla); fprintf(fp,"%s\n",p->name); fprintf(fp,"%s\n",p->sex); fprintf(fp,"%d\n",p->age); fprintf(fp,"%s\n",p->dorn); fprintf(fp,"%s\n",p->phon); p->sub=0;p->poi=0; for(i=p->sub;i<=10;i++) { fprintf(fp,"%s\n",p->les[i].lessonn);
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服