版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、中南大学二O三二O四学年第一学期信息科学与工程学院程序设计基础实践设计报告课程名称:程序设计基础实践班级:2013级 物联网工程1302班学号:0919130205姓名:张晨指导教师:占7 X、杨布二O三年十二月课程设计题目目录 /Contet 1题目初步分析 1程序总体设计 2程序具体设计10程序调试测试12心得与体会33源代码33课程设计题目学生成绩管理系统学生信息为:学号、姓名、年龄、性别、出生年月、地址、电话、各科成绩等,试设计 一个学生信息管理系统,使之能提供以下功能。1. 学生信息录入;2. 学生信息浏览;3. 按学号、姓名查询;4. 学生成绩排序;5. 学生信息修改与删除。6.
2、综合信息输出。题目初步分析对对象的处理1. 由于每一个对象都包括多个成属性,所以要考虑数据的存储形式要用结构体类型来实现。2. 假如以数组的方式来存储, 当然可以,但是定义一个数组, 首先必须知道学生人数大 概是多少,以便我们确定数组的大小, 但是题目中没有给出, 而且题目要求中有大量的删除、 插入操作,所以用链表的方式比较方便。3. 由于题目中的数据需要长期保存,用普通的函数来写已经不可以满足要求了,所以需要用到文件来存储。对过程的处理1. 输入学生信息(设计一个生成链表程序,并将链表中的数据保存到一个数据文件中) :2. 插入(修改)学生信息(设计一个从数据文件中读数据的程序并将数据存放在
3、链表中 进行操作,最后将处理后链表中的数据再次保存到一个数据文件中);3. 删除学生信息(设计一个从数据文件中读数据的程序并将数据存放在链表中进行操 作,最后按照要求将链表中的某个数据删除后再次保存到一个数据文件中);4. 浏览学生信息(设计一个从数据文件中读数据的程序并将数据存放在链表中进行操 作,再将链表中的数据显示出来)。5. 将学生总分排序(设计一个从数据文件中读数据的程序并将数据先存在链表中,后用 一个数组记录总分,进行排序,在查找回相应信息,输出)。程序总体设计主要函数程序框图1.输入函数。开始2.修改函数。开始定义字符型变量select定义整型变量returnToMain=0Ja
4、显示提示语向变量 select输入 一个新的值select=1执行函数 modify On e(1)Vr执行函数returnToMain=2JJselect=Oselect=2执行函数modify On e(2)J跳出循环3.删除函数。结束4.显示函数。开始select=2定义字符型变量select=1定义整型变量returnToMain=0显示提示语向变量select输入一个新的值select=1select=4r执行函数displayAllLJ执行函数returnToMain = 2J-J氏3F/执行函数displayOneretur nToMa in=display On e(selec
5、t)Jxz跳出循环5.排序函数。开始定义整型变量 n=1,i,j,k,select=0将链表内容导入数组1i=01FStude ntNumber=0返回返回返回返回返回No more in formatio n can be sorted根据数组排序检索链表内容1 !返回77选择1选择2选择31总程序框图rscorekscorek=j删除数据修改数据t=scorei;scorei=scorek;scorek=t程序具体设计1. p():为了方便输出图形。2. welcome ():调用了 p()函数,实现打印出欢迎界面的功能。3. seleti on page():打印出选择界面;4. fil
6、e_():用来在打开程序时,装载文件数据到链表。 该函数返回值是student类型的指针变量head ;5. save():用来在每次修改或者输入学生基本信息之后实时保存数据。 保存采用删除再写入的方式进行的。6.i nput()调用了 save()函数,主要实现建立链表和确定链表头尾节点。 该函数具有判断输入数据是否重复功能。用键入字符的方式获取用户需要的操作。7. search():主要是用来根据号码或者姓名来筛选,它服务于后面的其他函数。 它返回的值是要搜寻的链节的上一节点。但是它在返回是头的时候要分情况讨论。 用键入字符的方式获取用户需要的操作。8. modify on e()主要功能
7、是修改某一个数据的值。 使用了 search()函数来在链表中检索检索。 用键入字符的方式获取用户需要检索的方式。选择并用select来区分当search返回值是头时的两种情况。 返回值用来判断用户的下一步操作。9. revise()主要功能是来执行 modify。ne,给modify on e()传递参数。打印出修改界面;调用 modify on e();用键入字符来判断用户的选择并且将参数传给modify one。10. deleteo ne()主要功能是删除一个数据。为deletee服务的函数。调用了 search()函数来选择要删除的方式。使用save()来保存。通过输入字符来判断筛选
8、方式。11. deleteall():用一个循环一次性删除所有的数据。使用save()来保存。12. delete_()主要功能是来实现 deleteone和deleteall,并给出界面来让用户选择。用户键入选择删除方式,并将它传给delete one作为实参。13. displayAII():主要功能是显示出所有学生的信息。通过遍历读取链表中的数据并显示。14. display On e():主要功能是显示一个学生的信息。通过search()函数查询数据。通过键入的方式选择通过学号还是名字查找。15. display():主要功能是输出显示界面并进行选择。调用了 display On e(
9、)和 displayAll() 。16. sort():主要功能是通过选择排序进行排序和数据的输出。将链表中的数据存储在数组中,再通过查找返回链表综合输出相关信息。17. exit()显示退出界面。18.Start():通过用户输入信息执行相应语句。执行到exit()时退出系统。调用了 input() 、revise() 、delete() 、display() 、sort()和 exit()函数。 19.mai n()组合 welcome()和 Start() 函数(附图:本程序所有编写的函数);IIpIfwelcomeItselecti onp&geItfile=Ifs&veinputIt
10、search.Ifnw 込i fyOneIfrevise比deleteAll1 IfdleteOneIfdelete_IfdisplayAllIIdipl&yOueIfdi splayIfsortIfexitIfStrtItin a i Ji程序调试与测试程序调试在做好主界面后,对函数进行编写,每次写完一个小函数之后都会编译运行来测试函数 是否可用,发现出错后找出问题所在再修改,以确保函数的准确性。大题框架完成后进行调试。多次调试把出现的小错误分别解决。在调试中遇到的主要问题(1) .原本编译器选用了Turbo C2.0,但是很多语法规则无法兼容,而且不允许输入中文会影响到用户体验,因此最后选
11、用了C-Free编译器来编译代码。同时TC中特有的clrscr() 函数需要相应替换成system( cls ”)。(2).定义结构体没有想到把函数加进去,使得程序更加累赘。(3).调试程序的时候,函数运行一次之后自动闪退,后加人一死循环,在满足 returnToMain为特定值的时候才停止循环。这样程序不至于闪退。(4) .原设计的密码验证系统后因为密码安全性过低而被迫取消。这说明我们还有很多 要学习的东西,还有很大进步的空间。(5) .search()函数中若返回值是头指针需要单独讨论,开始的时候没有注意到特殊位置的特殊性,导致头指针一直返回NUULL(6) .sort()函数中排序的时候
12、因为没有注意到成绩排名的降序性,排名倒序。(7) .sort()函数中的头指针需要特殊讨论,而且因为没有注意循环的间套和并列关系, 导致排序没有完成就开始寻找结点。(8) .由于小组合作,每个人变量名和编程风格不同,导致换行和变量名的不一致,最 后通过报错查找错误,统一了变量名。程序测试1.欢迎界面。C:U se rszha ngche nDes kto p中南大学物联网学生成绩管理系统心亡2. 选择界面。C:Userszha ngc henDesktop中南大学物联网学生成绩管理系统心护Studeot Grade Itanage System1 _ input studentf s info
13、i*mat ion2.delete studentJ s information3 .changre studentf s iof ormat ion 4how student1& infarnation5 asopt of students grades6 .endpress a rigrht key to enter3.输入学生信息。X切 c hco lzun tJdTMsy 3 B2Q5Name SKMBitthd电二995国6 累8iAddle 炖林LLII3直TmleplwnB“:L839 国 92PP5BAga益 8Englkll-JHa”gBPTDglaLmmzhlgBK-n p
14、u se 艮 Ehm ng c h e rADew Its p” 召M汁 J逊*11笋6孟Input new isJfolnlt ion wggdy -Add Mt;益 denctM 国lEt!=ln yalsls tin苇屮 gh_Exartrfo next=NULL;if(head=NULL)head=flag;last=head;elselast- n ext=flag;last=last- n ext;Stude ntNumber+;flag=(struct stude nt *)malloc(sizeof(struct stude nt);last- next=NULL;free(f
15、lag);fflush(stdi n);flag=NULL;fclose(fp);retur n head;struct stude nt *save()FILE *fp;int i;struct stude nt *p仁head;fp=fope n(Stude nt.dat,w);fclose(fp);fp=fope n( Stude nt.dat,a+);for(i=0;in ext;fclose(fp);/*输入函数*/void in put()stude nt *p1;int i;bool mark;while(1)clrscr();p仁head;int select = 0;flag
16、 = (stude nt *) malloc (sizeof(stude nt);if(flag = NULL)prin tf(”=、n);printf(”In put newin formatio nnn ”);prin tf(nit cannot be writte nn);prin tf(npress any ket to retur n);getch();break;elseprin tf(tSchool Number:);sca nf(%s,flag-sch nu m);prin tf(ntName:);sca nf(%s,flag-n ame);prin tf(ntBirthday
17、:);scan f(%s,flag-birthday);prin tf(ntSex:);scan f(%s,flag-sex);prin tf(ntAddress:);sca nf(%s,flag-address);prin tf(ntTelepho ne:);scan f(%s,flag-tel);prin tf(ntAge:);scan f(%d, &flag-age);prin tf(ntE nglish:);scan f(%f, &flag-E nglish);prin tf(ntMath:);scan f(%f, &flag-Math);prin tf(ntProgram min g
18、:);sca nf(%f, &flag-Programmi ng);mark=true;for(i=0;isch nu m,flag-sch num)=0)system(cls);prin tf(”=、n);printf(”In put newin formatio nnn ”);prin tf(nttwro ng!%sExistedn,flag-sch nu m);p1-displayi nfo();prin tf(nttpress any key to con ti nu e);getch();mark=false;break;p1=p1- n ext;if(mark)Stude ntNu
19、mber+;if(Stude ntNumber = 1)head = flag;elselast- n ext = flag;last = flag;last- next=NULL;save();system(cls);if(mark)prin tf(=n);printf(”In put new in formati onnn);prin tf(nnttSaved!);prin tf(nntt1.Add more stude ntsin);prin tf(ttO.returnnn);prin tf(ttpress the right ket to en ter:); doselect=getc
20、h();select-=48;while(select1); if(select != 1) break;struct stude nt *search(char target20,i nt select) stude nt *p=head,*r=head;if(select=2)while(p!=NULL)if(strcmp(target,p-n ame)=0) return r;elser=p;p=p-n ext;elsewhile(p!=NULL)if(strcmp(target,p-sch num)=0) return r;elser=p;p=p-n ext;int modify On
21、 e(i nt select12)int select = select12 + 1,m=0;char select2;struct stude nt *result=NULL;while(1)system(cls);prin tf(”=、n);printf(”Changethe informationnn);char target20;if(select = 2)prin tf(I nput the n ame:);elseprin tf(I nput the nu mber:);sca nf(%s, target);result = search(target,select);system
22、(cls);prin tf(=n);printf(”changethe informationnn);if( result=NULL )prin tf(nnnNot exist #404);elseif(result=head)prin tf(%s,result- n ame);if(result- n ext)prin tf(%s,result- n ame);if(result-n ext)&(!strcmp(result-n ext-sch nu m,target)|!strcmp(result- n ext- n ame,target)result=result- n ext;else
23、result=result- n ext;for(;)clrscr();printf(”=、n”);printf(”in formatio nnn ”);result-display in fo();prin tf(n0.e nd”);prin tf(nWhat you want to cha nge?n”);select2=getch();prin tf(”School nu mber locked!);prin tf(0 for 10);prin tf(2 for exit!);switch(select2)case 1:pri ntf(”n ame:);sca nf(”s”,result
24、-n ame);break;case 4:pri ntf(sex:);sca nf(”s”,result-sex); break;case 7:pri ntf(”age:);scan f(%d, & result-age);break;case 8:pri ntf(E nglish:);scanf(”f”, &result-English);break;case 9:pri ntf(Math:);scan f(”f”,& result-Math);break;case 0:pri ntf(”Programmi ng:);sca nf(”f”,&result-Program min g);bre
25、ak;case 3:pri ntf(birthday:);sca nf(”s”,result-birthday);break;case 5:pri ntf(”address:);sca nf(”s”,result-address);break;case6:pri ntf(”telepho ne:);scan f(”s”,result-tel);break;case 2:m=1;break;if(m=1)break;printf(nntt Now you want to :);printf(nntt1.Modify another students information according t
26、o school nu mber”);prin tf(ntt2.Modifyano therstude nts in formatio naccord ingnu mber”);Change theto schoolprin tf(ntt3.return to edit);prin tf(ntt4.return to menu);prin tf(nn ttpress the right key to en ter ); doselect=getch();select-=48;while(select4);save();if(select 2) retur n select - 2; break
27、; /*修改函数*/void revise()char select;int returnToMain = 0;while(1)clrscr();prin tf(”= =n);printf(”Change thein formatio nnnn ”);printf(”1.fi nd out the stude nt accord ingto n amen);printf(”2.fi nd out the stude nt accord ingto school nu mber n);prin tf(0.return.nnnnn);printf(”press the right key toen
28、 ter.nn);prin tf(= =n);select=getch();switch(select)case 1: returnToMa in = modify On e(1); break;case 2: retur nToMa in = modify On e(2); break;case O: retur nToMa in = 2; break;if(retur nToMa in = 2) break;void deleteAII()char deleteALL10;clrscr();prin tf(”= =、n);theprin tf(Deletein formatio nnnnn ”);printf(nntt! ! Are you sure to delete all?! ! n);prin tf(ttI npout delete to make suredeletenntt);fflush(stdi n);gets(deleteALL);if(!strcmp(deleteALL,delete)if(Stude ntNumber = 0)p
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 网络安全教育课件图文完美版
- 合规转利润:降本增效全指南(2026)《GBT 39300-2020含铬电镀污泥处理处置方法》
- 标识设施安装实施方案
- 合规转利润:降本增效全指南(2026)《GBT 39183-2020消费品中亚硝胺迁移量的测定 气相色谱-串联质谱法》
- 2026年浙江省人教版初中数学下册概率统计综合测试题
- 合规转利润:降本增效全指南(2026)《GBT 39043-2020游乐设施风险评价 危险源》
- 合规转利润:降本增效全指南(2026)《GBT 38697-2020块菌(松露)鲜品质量等级规格》从合规成本到利润增长全案:避坑防控+降本增效+商业壁垒构建
- 运动康复概论与分类
- 《生产运作与生产率管理》-第九章
- JJF(晋) 178-2026新能源汽车检验用底盘测功机校准规范
- 2027届高考语文复习:厘清语法逻辑 解锁语用考题 课件
- 2026天津地铁1号线综合站务员招聘笔试备考试题及答案详解
- 培智数学16册全册教学设计
- 2026年中国广电5g试题及答案
- 电梯装修施工方案
- GB/T 47911-2026小微型企业安全生产标准化管理体系要求
- 自动化胰岛素输注系统临床应用护理专家共识(2026版)
- 2026年秋季小学数学苏教版六年级上册数学教学计划含教学进度表
- SYT 6696-2025《储油罐机械清洗作业规程》
- 2026年部编版新教材道德与法治小学三年级上册全册教案(含教学计划)
- 英语报刊选读第一章文体概述
评论
0/150
提交评论