安徽工业大学计算机学院程序的设计综合实习报告范本.doc
《安徽工业大学计算机学院程序的设计综合实习报告范本.doc》由会员分享,可在线阅读,更多相关《安徽工业大学计算机学院程序的设计综合实习报告范本.doc(29页珍藏版)》请在咨信网上搜索。
工业大学计算机学院程序设计综合实习报告 题目:现代教学管理系统 :忻 学号:129074228 学院:计算机学院 班级:软件123班 指导老师:王森玉 完成日期:2013/5/22 题目: 现代化成绩管理系统 课程设计容简介:高校中对于学生的考核主要通过考试来进行,传统不通过计算机网络发放考试的成绩容易出现发错,漏发等问题,使用计算机来解决这个问题是十分必要的。程序可以在登陆时选择登陆身份,并给予不同权限对成绩系统进行访问,以达到教师可修改,可查询,可记录;学生可查询的目的。 设计者名称: 忻 指导教师意见: 指导教师签名: 一、问题定义:4 二、可行性研究:4 I、项目的由来:4 II、可选方案:4 III、可行性:4 1、技术可行性:4 2、经济可行性:5 3、操作可行性:5 4、法律可行性:5 IV、结论:5 三、需求规格说明6 I、目标:6 II、数据需求:6 1、数据量:6 2、数据定义和结构7 III、功能需求:7 四、总体设计:8 I、软件的结构(HIPO图):8 五、各模块详细设计9 I、编译预处理模块9 II、主函数模块10 III、browse()函数模块10 IV、insert()函数模块11 V、deletel()函数模块11 VI、scorein()函数模块12 VII、change()函数模块12 VIII、load()函数模块12 IX、save()函数模块13 X、mima()函数模块13 六、程序源代码14 七、程序测试25 I、测试抓图:25 II、测试容:26 八、总结27 一、 问题定义: 现代化的校园对学生进行考核的主要方式是通过考试,而传统的发布成绩方式存在着不同的问题,通过计算机网络可对这些问题进行解决,包括登陆时选择登陆身份,并给予不同权限对成绩系统进行访问,以达到教师可修改,可查询,可记录;学生可查询的目的。 二、 可行性研究: I、 项目的由来: 某高校教师需要对学生的成绩进行管理,包括学生信息的录入,学生成绩的录入,成绩的修改以及学生的成绩查询并保存。学生需要对成绩进行查询。 II、 可选方案: 一、 可选用人工进行学生的基本信息的管理,进行平时成绩,期末成绩以及总评成绩的计算,再人工将成绩发放到学生的手中。 二、 可选用直接从文件进行成绩的导入,直接得到学生的基本信息及考试成绩、总评成绩,或者通过人手工录入学生的基本信息及考试成绩、总评成绩。学生也可对其进行查找。 III、 可行性: 1、 技术可行性: 学校每一门学科的考试人数都很多,若每场考试的成绩都需要老师人工计算并发布成绩,任务量大且出错率高。使用计算机自动计算学生考试成绩的方式大大降低了出错率,而且使用计算机省时省力,方便进行成绩的管理及查询。 2、 经济可行性: 利用计算机技术,开发学生成绩管理系统,可以重复使用,对学生的管理很有用,有必要开发。 3、 操作可行性: 操作计算机简单易行,并且不需要花费太多的人力。 4、 法律可行性: 开发学生成绩管理系统有利于学校对学生的管理,不违反法律及相关法规。 IV、 结论: 面对高校学生成绩管理的巨大工作量,采用计算机的管理是极其必要的,若采用方案2的方法不单单可以减少很多的人力使用,使教师的工作量得到大量减少,而且出现错误的机率更低,更能够直接对学生的成绩进行管理,方便教师和学生的成绩的查询。 三、 需求规格说明 I、 目标: 登陆身份选择 教师 学生 登陆身份验证 系统对请求进行处理 教师输入学生的信息。或从文件导入成绩。 学生系统 学生学号,姓名,编号 平时、期末成绩比例 平时成绩 期末成绩 系统对数据进行记录以及处理,并将数据记录在链表中 可以对储存在链表中的成绩进行访问查询 教师 对储存在链表中的数据进行修改 教师可以选择成绩的保存路径 II、 数据需求: 1、 数据量: 教师的登陆账户及密码,学生学号,,平时成绩,期末成绩,总评成绩。 2、 数据定义和结构 :教师的登陆用 = teacher ,密码 = 0000; :学号 = 学生在校自动分配的学号; 平时成绩 = 教师给学生所打的平时分数; 期末成绩 = 学生期末考试的成绩; 总评成绩 = 平时成绩 × 平时成绩所占的比例 + 期末成绩× 期末成绩所占的比例; III、 功能需求: 性能:能快速响应,界面颜色多元化,清晰,数据对应整齐。在使用过程中容易操作,错误操作的次数少。 功能:(IPO) 处理 输出 输入 登录身份 根据身份信息给予相应的权限 输入相应的操作,包括学生信息、成绩 将成绩输入链表中,并自动计算成绩 学生的基本信息和总评成绩 权限记录 响应要求 四、 总体设计: I、 软件的结构(HIPO图): 现代化学生成绩管理系统 教师入口 学生入口 输入学生的基本信息,成绩 从文件中导入学生的基本信息,成绩 输入 系统处理 将数据保存在链表中,可以修改 系统自动计算学生的总评成绩 输出 将链表中的数据显示在屏幕上 将链表中的数据显示在屏幕上 五、 各模块详细设计 I、 编译预处理模块 使用的函数库:stdio.h、windows.h、string.h、conio.h 学生数据结构体的声明:typedef struct student{}stu 包括学号num,姓名name,班级bclass,平时分数score1,期末成绩score2,总评成绩score,指向下一结构体的next指针 选择学生或教师函数声明int xuanze() 教师选单函数声明char menu1() 学生选单函数声明char menu2() 密码函数函数声明void mima() 导入函数声明stud*load() 查询函数声明stud*search(stud*,int*) 导出函数声明void save(stud*) 成绩录入函数声明void scorein(stud*) 插入函数声明void insert(stud*) 删除函数声明void deletel(stud*) 修改函数声明void change(stud*) 浏览函数声明void browse(stud*) II、 主函数模块 定义字符型表头选择量choice1,choice,choice1用于登录身份选择,choice用于表头选择; 定义字符型变量c用于接收Y或N的选择 定义stu型指针变量head与p,用于数据链表的连接 跳转loop部分 Choice1的值 1 2 调用函数mima() 调用函数char menu2() 调用函数menu1() 调用函数menu2() 值4:调用函数deletel() 值5:调用函数scorein() 值6:调用函数change() 值7:调用函数load() 值8:调用函数save() 值9:将链表指针重置 值0:goto跳转 值3:printf链表中的数据 值2:调用函数insert() 值1:调用函数browse() Choice的值 Choice的值 值1: 调用函数browse() 值2:printf链表中的数据 值3:将链表指针重置 III、 browse()函数模块 i= 0,p = head -> next while(p != NULL) 输出链表中全部的学生信息及成绩 p = p ->next IV、 insert()函数模块 an,xh[10],xm[9],bc[11],*p,*q while(an == ‘Y’) p = head,输入得到学生的学号,姓名,班级。strcmp(xh,0000) while((p->next!=NULL)&&(strcmp(xh,p->next->num)>=0)) p=p->next strcpy(q->num,xh) strcpy(q->name,xm) strcpy(q->bclass,bc) q->next=p->next;p->next=q 继续输入,判断输入是否为Y V、 deletel()函数模块 while(p->next!=NULL&&i<n) p=p->next i,xz,n, c,xm[9],xh[10], st*p,*q p = head if(p->next!=NULL) T F 值2 值3 其他 输入xz switch(xz) 值1: 输入学号 while(p->next!=NULL&&strcmp(xh,p->next->num)!=0) p=p->next 输入姓名 while(p->next!=NULL&&strcmp(xm,p->next->name)!=0) p=p->next 输入序号 输出错误 q= p-> next if(q == NULL) T F 输出未找到数据 确认是否删除数据,p->next=q->next,free(q) VI、 scorein()函数模块 i=0 ps qm *p p=head->next 输入平时成绩所占的百分比qm=100-ps 输入平时成绩,期末成绩 while(p!=NULL) 计算总评成绩:p->score=p->score1*ps/100+p->score2*qm/100 p=p->next VII、 change()函数模块 p=search(head,&i) while(!p) if(p) 输出找到的数据 T F 输出未找到 i=0 xz x y *p VIII、 load()函数模块 *fp fn[12] *head,*p,*q 从文件中进行导入 if((fp=fopen(fn,"rb"))==NULL) T F 输出打开文件时发生错误并退出 while(! feof(fp)) if(fread(p,sizeof(stud),1,fp)==1) T F p->next=q->next q->next=p;q=p IX、 save()函数模块 *fp fn[12] *p 从文件中进行导入 if((fp=fopen(fn,"wb"))==NULL) T F 输出打开文件时发生错误并退出 while(p!=NULL) if(fwrite(p,sizeof(stud),1,fp)!=1) T F 输出文件打开错误 p=p->next X、 mima()函数模块 i n name[8] name1[21] password1[21] flag1 flag2,输入用户名,密码 for(i = 0; i < 20;) *(password1 + i) = getch() if(*(password1 + i) == '\b') T F if(i>0) T F i-- 输出“退格” 输出“空格退格” continue if(*(password1 + i) == '\r') T F break i++ printf("*") *(password1 + i) = '\0' flag2 = strcmp(password,password1) if(flag1 == 0&&flag2 == 0) T F 登陆成功 登陆失败 六、 程序源代码 #include<stdio.h> #include<string.h> #include<stdlib.h> #include<windows.h> #include<conio.h> typedef struct st { char num[10],name[9],bclass[11]; //学号、、班级 float score1,score2,score; //平时成绩、期末成绩、总评成绩 struct st*next; }stud; int xuanze(); //选择学生或教师 char menu1(); //教师选单 char menu2(); //学生选单 void mima(); //密码函数 stud*load(); //导入 stud*search(stud*,int*); //查询 void save(stud*); //导出 void scorein(stud*); //成绩录入 void insert(stud*); //插入 void deletel(stud*); //删除 void change(stud*); //修改 void browse(stud*); //浏览 //************************************** int main(void) { char choice1, choice, c; int i; stud *head,*p; head=(stud*)malloc(sizeof(stud)); //准备好表头 head->next=NULL; loop: choice1 = xuanze(); //进入选择系统 if(choice1 == 1) { mima(); //密码函数 while(1) { choice=menu1(); //教师系统的表头 switch(choice) { case '1':system("cls"); printf("浏览成绩情况。\n"); browse(head); getchar(); break; case '2':system("cls"); printf("插入学生成绩。\n"); insert(head); break; case '3':system("cls"); printf("查询学生成绩。\n"); p=search(head,&i); if(p!=NULL) //输出数据 { printf("%2d%10s %8s %10s",i,p->num,p->name,p->bclass); printf("%5.1f %5.1f %5.1f",p->score1,p->score2,p->score); } else printf("未找到!"); break; case '4':system("cls"); printf("删除学生记录。\n"); deletel(head);break; case '5':system("cls"); printf("学生成绩录入。\n"); scorein(head);break; case '6':system("cls"); printf("修改学生记录。\n"); change(head);break; case '7':system("cls"); printf("从文件中将成绩情况导入链表。\n"); head=load();break; case '8':system("cls"); printf("将链表中成绩情况保存到文件。\n"); save(head);break; case '9':system("cls"); printf("系统初始化。\n"); head=(stud*)malloc(sizeof(stud)); head->next=NULL; printf("%d %d\n",head,head->next); break; case '0':system("cls"); printf("返回上一级\n"); printf("是否保存当前数据到文件?(Y/N):"); c=toupper(getchar());getchar(); if(c=='Y') save(head); else { system("cls"); goto loop; } break; default:printf("输入错误!"); } if(choice == '0')break; printf("\n按任意键继续......!"); getchar(); } } if(choice1 == 2) //学生系统的表头 { while(1) { choice=menu2(); switch(choice) { case '1':system("cls"); printf("浏览成绩情况。\n"); browse(head); getchar(); break; case '2':system("cls"); printf("查询学生成绩。\n"); p=search(head,&i); if(p!=NULL) //输出数据 { printf("%2d%10s %8s %10s",i,p->num,p->name,p->bclass); printf("%5.1f %5.1f %5.1f",p->score1,p->score2,p->score); } else printf("未找到!"); break; case '3': system("cls"); goto loop; default:printf("输入错误!"); } if(choice == '3')break; printf("\n按任意键继续......!"); getchar(); } } if(choice1 == 3) printf("Goodbay!"); exit(0); } //*********************************************** int xuanze() { int choice; system("color 21"); printf("你好!请选择入口:\n"); printf("1.老师入口\n2.学生入口\n3.退出系统\n请选择:"); scanf("%d", &choice); fflush(stdin); return choice; } char menu1() //教师表头 { char c; system("cls"); system("color 31"); printf("\n\n\n\n\n\n =======成绩管理系统========\n"); printf(" --------------\n"); printf(" 1.浏览成绩情况\n"); printf(" 2.插入成绩学生\n"); printf(" 3.查询成绩学生\n"); printf(" 4.删除学生记录\n"); printf(" 5.学生成绩录入\n"); printf(" 6.修改学生记录\n"); printf(" 7.将文件中成绩情况导入到链表\n"); printf(" 8.将链表中成绩情况导出到文件\n"); printf(" 9.系统初始化\n"); printf(" 0.返回上一级\n"); printf("\n\n 请选择。。。。。。。\n\n\n\n"); c=getchar();getchar(); return c; } char menu2() //学生表头 { char c; system("cls"); system("color 34"); printf("\n\n\n\n\n\n =======成绩管理系统========\n"); printf(" --------------\n"); printf(" 1.浏览成绩情况\n"); printf(" 2.查询学生成绩\n"); printf(" 3.返回上一级\n"); printf("\n\n 请选择。。。。。。。\n\n\n\n"); c=getchar();getchar(); return c; } void browse(stud*head) { //将链表中各个结点数据依次输出 int i=0; stud * p; //工作指针 p=head->next; //指向首结点 printf("序号 学号 班级 平时成绩期末成绩总评成绩\n"); while(p!=NULL) //指针不空 { printf(" %2d %-10s %-8s %-10s",++i,p->num,p->name,p->bclass); printf(" %5.1f %5.1f %5.1f\n",p->score1,p->score2,p->score); p=p->next; //工作指针p移动 } } //***************************** void insert(stud*head) { //插入新结点,并使链表各结点按学号升序排列 char an,xh[10],xm[9],bc[11]; stud*p,*q; do { p=head; printf("请输入学生的学号、、班级:\n"); gets(xh); gets(xm); gets(bc); //输入数据 if(!strcmp(xh,"0000")) return; //以“0000“作为结束标记 while((p->next!=NULL)&&(strcmp(xh,p->next->num)>=0)) p=p->next; // 查找新结点的插入位置 q=(stud*)malloc(sizeof(stud)); //生成新结点由q指向 strcpy(q->num,xh); //把数据送入新结点 strcpy(q->name,xm); strcpy(q->bclass,bc); q->next=p->next;p->next=q; //吧新结点插入链表 printf("继续吗?"); an=toupper(getchar()); getchar(); } while(an=='Y'); } //**************************** stud*search(stud*head,int*i) { //在链表中按或学号进行查找 int xz; char xh[10],xm[9]; stud*p; //工作指针 p=head->next; *i=1; //指向首结点 printf("1.按查找 0.按学号查找\n"); scanf("%d",&xz); getchar(); if(xz) { printf("请输入学生:\n"); gets(xm); //输入 while(p!=NULL&&strcmp(xm,p->name)!=0) //按查找 { p->next; (*i)++; } } else { printf("请输入学生:\n"); gets(xh); //输入学号 while(p!=NULL&&strcmp(xh,p->num)!=0) //按学号查找 {p=p->next;(*i)++;} } return p; } //******************************* void deletel(struct st*head) { //删除结点 int i,xz,n; char c,xm[9],xh[10]; struct st*p,*q; //工作指针 p=head; //指针p指向头结点 if(p->next!=NULL) { printf("1.按学号删除 2.按删除 3.按序号删除\n"); scanf("%d",&xz); switch(xz) { case 1:printf("请输入学生学号:\n"); getchar(); gets(xh); //输入学号 while(p->next!=NULL&&strcmp(xh,p->next->num)!=0) //按学号查找 p=p->next; break; case 2:printf("请输入学生:\n"); getchar(); gets(xm); //输入 while(p->next!=NULL&&strcmp(xm,p->next->name)!=0)//按学号查找 p=p->next; break; case 3:printf("请输入序号:\n");i=1; scanf("%d",&n); getchar(); //输入序号 while(p->next!=NULL&&i<n) //查找第n个结点 { p=p->next; i++; } break; default:printf("选择错误!\n"); return; } q=p->next; //指针q指向p的直接后继 if(q==NULL) { printf("未找到指定结点,没有执行删除!\n"); return; } printf(" %-10s %-8s 请确认(Y/N)",q->num,q->name); c=getchar(); getchar(); if(tolower(c)=='y') { p->next=q->next; //把结点从链表中删除 free(q); return; //释放q所指的结点 } } printf("无结点可删除!\n"); } //*********************************** void scorein(stud*head) { //依次给链表中各结点的数据录入成绩 int i=0; int ps,qm; stud*p; //工作指针 p=head->next; //指向首结点 printf("请输入平时成绩在总评成绩中所占的百分比:\n"); scanf("%d",&ps); qm=100-ps; while(p!=NULL) { printf("%2d%10s %8s %10s\n",++i,p->num,p->name,p->bclass); printf("平时成绩期末成绩:"); scanf("%f%f",&p->score1,&p->score2); //录入平时成绩和期末成绩 p->score=p->score1*ps/100+p->score2*qm/100;//计算出总评成绩 printf("%5.1f\t%5.1f\t%5.1f\n",p->score1,p->score2,p->score); p=p->next; // 工作指针p移动 } getchar(); } //********************************* void change(stud*head) { //对链表中指定结点的数据进行修改 int i=0,xz; float x,y; stud*p; //工作指针 do { p=search(head,&i); //查找要修改的结点 if(p) { printf("%2d%10s %8s %10s",i,p->num,p->name,p->bclass); printf("%5.1f %5.1f %5.1f\n",p->score1,p->score1,p->score); } else printf("未找到!\n"); } while(!p); printf("哪部分信息?\n"); printf("1.修改学号\n"); printf("2.修改\n"); printf("3.修改班级\n"); printf("4.修改平时成绩\n"); printf("5.修改期末成绩\n"); printf("0.不修改\n"); scanf("%d",&xz);getchar(); switch(xz) { case 1:printf("请重新输入学号:");gets(p->num);break; case 2:printf("请重新输入:");gets(p->name);br- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 安徽 工业大学 计算机 学院 程序 设计 综合 实习 报告 范本
咨信网温馨提示:
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【二***】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【二***】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。
关于本文