车辆管理系统课程设计报告完整_第1页
车辆管理系统课程设计报告完整_第2页
车辆管理系统课程设计报告完整_第3页
车辆管理系统课程设计报告完整_第4页
车辆管理系统课程设计报告完整_第5页
已阅读5页,还剩81页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

车辆管理系统课程设计报告(优质文档,可直接使用,可编辑,欢迎下载)

车辆管理系统课程设计报告(优质文档,可直接使用,可编辑,欢迎下载)课程设计报告课程设计题目:车辆管理系统学生姓名:ABC专业:软件工程班级:16*****指导教师:*祥**康(完整源代码和注释在我上次的另一篇文章里)2021年6月18日东华理工大学课程设计评分表学生姓名:A班级16*****学号:20212021****课程设计题目:项目内容满分实评选题能结合所学课程知识、有一定的能力训练.符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求.10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日格式要求:中文正文使用五号字体,英文及代码使用小五号字体东华理工大学课程设计评分表学生姓名:B班级16*****学号:20212021****课程设计题目:项目内容满分实评选题能结合所学课程知识、有一定的能力训练.符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日格式要求:中文正文使用五号字体,英文及代码使用小五号字体东华理工大学课程设计评分表学生姓名:C班级16*****学号:20212021****课程设计题目:项目内容满分实评选题能结合所学课程知识、有一定的能力训练。符合选题要求(5人一题)10工作量适中,难易度合理10能力水平能熟练应用所学知识,有一定查阅文献及运用文献资料能力10理论依据充分,数据准确,公式推导正确10能应用计算机软件进行编程、资料搜集录入、加工、排版、制图等10能体现创造性思维,或有独特见解10成果质量总体设计正确、合理,各项技术指标符合要求。10说明书综述简练完整,概念清楚、立论正确、技术用语准确、结论严谨合理;分析处理科学、条理分明、语言流畅、结构严谨、版面清晰10设计说明书栏目齐全、合理,符号统一、编号齐全。格式、绘图、表格、插图等规范准确,符合国家标准10有一定篇幅,字符数不少于500010总分100指导教师评语:指导教师签名:年月日格式要求:中文正文使用五号字体,英文及代码使用小五号字体【目录】题目…03课程设计任务…03数据结构…04四、模块划分…04程序的总体设计…05流程图…06七、主要源程序代码(附件源代码)…09八、测试情况及调试中问题与解决方案…10九、实验小结及心得…15十、工作日志…16十一、东华理工大学评分表…17一、题目:车辆管理系统设计二、课程设计任务:车辆管理系统主要负责各种车辆的常规信息管理工作.系统中的车辆主要有大客车、小轿车和卡车。每种车辆有车辆编号、车牌号、车辆制造公司、车辆购买时间、车辆型号(大客车、小轿车和卡车)、总公里数、耗油量/公里、基本维护费用、养路费、累计总费用等信息。大客车还有载客量(最大载客数)信息,小轿车还有箱数(两厢或三厢)信息,卡车还有载重量等信息。每台车辆当月总费用=油价*耗油量/公里+基本维护费用。基本维护费用:客车:2000元/月,小轿车:1000元/月,卡车:1500元/月.(1)添加车辆:主要完成车辆信息的添加,要求编号唯一。当添加了重复的编号时,则提示数据添加重复并取消添加;当车辆信息库已满,则提示不能再添加新的数据。(2)查询车辆:可按照三种方式来查询物品,分别为:按车辆制造公司查询:输入车辆制造公司,输出所查询的信息,若不存在该记录,则提示“该车辆制造公司不存在!";按编号查询:输入编号,输出所查询的信息,若不存在该记录,则提示“该编号不存在!";按类别查询:输入类别,输出所查询的信息,若不存在记录,则提示“该类别没有车辆!";(3)显示车辆信息库:输出当前车辆信息库中所有车辆信息,每条记录占据一行。(4)编辑功能:可根据查询结果对相应的记录进行修改,修改时注意编号的唯一性。(5)删除车辆:主要完成车辆信息的删除。如果当前车辆信息库为空,则提示“车辆信息库为空!”,并返回操作;否则,输入要删除的编号,根据编号删除该车辆的记录,如果该编号不在车辆信息库库中,则提示“该编号不存在”。(6)统计信息:输出当前车辆信息库中总物品数,以及按车辆类别,统计出当前车辆信息库中各类别的物品数并显示。(7)车辆信息存盘:将当前程序中的车辆信息存入文件中。(8)读出车辆信息:从文件中将车辆信息读入程序。。要求:1、用C++语言实现程序设计;2、利用类和对象数组实现信息的数据结构设计;3、系统的各个功能模块要求用函数的形式实现;4、界面友好(良好的人机交互),程序加必要的注释。三、数据结构Carsintnum;//编号intpnum;//车牌号charmade[20];//制造公司doubletime;//购买时间(多少个月)inttype;//型号(1—大客车,2-小轿车,3—卡车)doublekm;//总公里数intcost;//基本维护费用intRoadFee;//养路费doubleOilKm;//耗油量/公里doubleAllCount;//累计总费用friendManager;//声明为友元Managerintpeople[N];//最大载客量(大客车)intcoach[N];//箱数(小轿车)intweight[N];//载重量(卡车)inttop;//记录当前车辆数量Manager(){top=0;}//车辆初始值为0voidadd();//添加车辆voidsearch();//查询车辆voidshow();//显示车辆信息库voidedit();//编辑功能voiddelet();//删除车辆voidsum();//统计信息voidwrite();//车辆信息存盘voidread();//读出车辆信息voidjiemian();//总界面四、模块划分车辆信息添加车辆信息添加车辆信息查询车辆信息显示车辆信息编辑车辆信息删除退出系统车辆管理系统五、程序的总体设计·类的设计:classCars{public: intnum;//编号intpnum;//车牌号charmade[20];//制造公司doubletime;//购买时间(多少个月)inttype;//型号(1—大客车,2—小轿车,3—卡车)doublekm;//总公里数intcost;//基本维护费用 intRoadFee;//养路费 doubleOilKm;//耗油量/公里 doubleAllCount;//累计总费用};classManager{private: Carscar[N]; intpeople[N];//最大载客量(大客车) intcoach[N];//箱数(小轿车) intweight[N];//载重量(卡车) inttop;//记录当前车辆数量public: Manager(){top=0;}//车辆初始值为0 voidadd();//添加车辆 voidsearch();//查询车辆 voidshow();//显示车辆信息库voidedit();//编辑功能voiddelet();//删除车辆voidsum();//统计信息voidread();//读出车辆信息voidwrite();//车辆信息存盘voidjiemian();//总界面};·函数设计:在管理类中定义了以下函数,功能标注在其后 voidadd();//用于添加车辆信息,进行信息录入; voidsearch();//用于查询车辆信息; voidshow();//显示车辆信息库voidedit();//编辑功能voiddelet();//删除车辆voidsum();//统计信息voidread();//读出车辆信息voidwrite();//车辆信息存盘voidjiemian();//总界面六、流程图·车辆信息添加·车辆信息查询·车辆信息显示·车辆信息编辑·车辆信息删除七、主要源程序代码由于程序代码功能多,此处只节选了添加车辆这一功能的代码,程序完整源代码另附文件/////////////////////////////////////////查询车辆///////////////////////////////////////////////////voidManager::search(){ intchoose,m,n,a=0; chari,t[20]; cout<〈"****************************”〈<endl; cout<<”*1。按车辆制造公司查询*"〈<endl; cout<<"*2。按编号查询*"〈〈endl; cout<<"*3。按类别查询*"〈<endl; cout〈〈"****************************"<〈endl; cout<〈”请输入你的选项:"; while(1) { cin>〉i; cout〈<endl; if(i==’1'||i==’2’||i=='3’) break; cout〈〈”输入错误,重输:"; } if(i=='1') {cout<<"请输入需查询车辆的制造公司:"; cin〉〉t;} elseif(i=='2’) {cout〈〈”请输入需查询的车辆编号:”; cin〉〉n;} elseif(i=='3’) {cout<〈”请输入需查询的车辆型号(1-大客车,2-小轿车,3—卡车):"; cin>〉m;} for(intj=0;j〈top;j++) if(strcmp(car[j]。made,t)==0||car[j]。num==n||car[j].type==m) {cout<<”编号车牌号制造商购买时间型号特性总公里养路费维护费油耗总费用"〈〈endl;break;} for(j=0;j〈top;j++) if(strcmp(car[j]。made,t)==0||car[j]。num==n||car[j].type==m) { cout<<setw(4)〈<car[j]。num〈〈setw(7)<<car[j].pnum〈〈setw(7)〈<car[j].made〈〈setw(7)<〈car[j].time; if(car[j].type==1) cout〈<setw(9)〈〈"大客车"<<setw(8)<〈"载客量:"〈<people[j]; elseif(car[j]。type==2) cout<<setw(9)<<”小轿车”<<setw(9)<〈”车厢数:”<〈coach[j]; else cout〈<setw(8)<〈”卡车"<〈setw(9)<〈”载重量:”〈〈weight[j]; cout<〈setw(6)〈〈car[j].km〈〈setw(7)<<car[j].RoadFee<<setw(7)<〈car[j].cost<〈setw(7)〈<car[j]。OilKm〈〈setw(8)〈〈car[j].AllCount〈〈endl; a++; } if(a!=0) { cout<<"是否进行修改?(1—是,2-否):”; cin〉〉choose; if(choose==1) edit(); } else { if(i=='1’)cout〈<"车辆制造公司不存在!”〈〈endl; if(i=='2')cout〈<”车辆编号不存在!”<〈endl; elseif(i=='3')cout〈<”车辆型号不存在!"<<endl; } cout〈<”按任意键返回功能主界面”<<endl;charzz=getch();jiemian();}八、测试情况及调试中问题与解决方案以下几点分别为我们在课程设计期间测试情况及调试中问题与解决方案显示车辆出现问题问题:养路费数据有问题以及功能3中显示车辆信息库要求每条记录占据一行,当前程序显示没有达到要求(图1。1)解决方案:发现代码分别在169201233282行由于复制出现问题,将top改为j后养路费数据正常(图1。2),使用setw设置域宽来控制显示将每条记录占据一行,修正后的正确显示(图1。3)图1.1图1。2图1.3文件无法自动创建问题问题:这是开始编的读取文件功能,当D盘根目录存在a。txt文件时,功能运行正常。但当D盘根目录不存在a.txt文件时,会出现如下问题(即编译没问题,但运行时会停止工作,如图2。1—图2。2)图2.1图2.22)解决方案:这是修改后的读取文件功能函数(图2。3),函数增加了判断“是否能顺利读取文件”功能。如果不能,则创建a。txt文件再进行读取图2.33。删除车辆问题1)问题:这个问题是我们课程设计中遇到的最大的问题,困扰了我们很久,当车辆数量足够时,能成功删除车辆(图3.1-3。3),当车辆删除到最后1辆时,界面显示剩余未发生改变,而存取的文档中车辆信息已经删除(图3。4—3。6)。图3.1图3。2图3。3图3。4图3.5图3.62)解决方案:将代码中的删除功能函数中算法进行改进,修正后即使车辆只有一辆也能删除,不会再出现1)中问题(图3.7-3.8)图3.7图3。8九、实验小结在我们课程设计的任务书中,说明了课程设计的目的是根据软件工程的方法与流程,在相对集中的实训教学时间内,通过一个功能较完整的小型应用系统的设计与开发,深入复习并进一步掌握面向对象的程序设计思想与方法。同时,培养我们采用面向对象的方法分析问题与解决问题的能力及团体组织与协作能力。这次课程设计是我们小组三个人历经一个多星期左右共同完成的,通过这一个多星期的学习、合作、交流,我们合作完成了车辆管理系统的程序设计。我们小组的三个人都是第一次做课程设计,面对我们所选的课程设计任务,一开始有点摸不着头脑,但在不断的分工,查找资料,合作交流后,我们逐步实现车辆管理系统中的功能要求。因为我们的小组长在课程设计之前就开始查阅资料,完成了程序的总体设计,在组长的带领下我们小组完成了这次任务.在这次课程设计中,我们也遇到了很多问题,当我们完成了程序的大体设计以及函数功能实现后,发现在显示功能这部分出现问题,在我们查阅书本后,使用了我们不熟悉的一个操作符setw(intn)来设置域宽,解决了显示问题,但由于界面受限制,为保证每条记录占据一行,导致输入的数据受到一些限制。在这之后,我们解决了一个困扰我们很久的数据问题,显示界面中养路费数据始终为0,虽然我们小组有分工,每个人的能力也不同,但是在我们三个人集体讨论这个问题后,我们找到了问题的根源并解决了这个问题,也正是这个问题,让我们体会到了合作的意义以及团队的力量。除此之外,在课程设计期间,遇到问题,也要学会向同学、老师请教,因为我们很可能一时思路受阻或者不熟悉某些操作,通过请教他人,能够迅速解决问题并学习到他人的长处。在课程设计中途,我们发现程序中的文件读取及功能函数中删除信息出现问题,影响了我们的进度,后来尝试了不同的方法,进行测试,并请教他人,对程序进行修改,完成了程序,在这次的问题中,我们遇到问题受到阻碍,心情也有些低落,本来以为已经完成了大部分,突然发现问题,感到一些压力,不过我们小组的人都没有放弃,一直坚持,不断尝试,最终一起努力完成了课程设计。当我们共同完成了这个课程设计,发现在这个过程中我们学习到了很多,得到了成长,学会与人沟通,与人合作,学会虚心请教他人,将所学知识与实践相结合,我们的分析解决实际问题的能力得到了锻炼,并且更真切的感受到无论做什么都需要细心和耐心,小细节也会出大错,细心和耐心,才能发现问题并解决问题从而避免问题,坚持完成。这次课程设计我们参考了部分程序进行的,对我们来说是一个挑战和锻炼。我们在完成设计要求的基础上在程序中加入了自己的想法和其他程序内容,也就是对程序改进了一番,并有一些创新。虽然感觉我们的创新还不够典型,但经过这番修改,我们对修改的程序感到满意.由于时间的紧迫和对知识的了解不够广泛,造成了系统中可能还存在一些不足,以后我们会继续努力,大胆创新,争取能编写出透射着自己思想的程序。这次课程设计让我们充分认识到了自己的不足,认识到了动手能力的重要性。我们会在以后的学习中更加努力锻炼自己,提高自己,让自己写出更好更完善的程序,为以后的编程打好基础!十、工作日志周一:我们通过共同讨论,有了各自的大致主要分工任务(A主要编写功能主函数的实现;黄晨茹主要负责代码的完善优化和实验报告;C主要负责调试代码和PPT)A在今天绘制了大致算法流程图,有了基本的设计雏形。编写了一些函数功能代码。黄晨茹在今天对一些功能函数有了优化的思路方向,并合作编写了一些函数功能实现的代码.C在今天对添加车辆函数进行了调试,并经过不断地测试调试将添加车辆函数错误基本解决。小组的每个成员对此次任务充满信心,今天都异常的激动。周二:我们今天共同编写其他所有函数的功能代码,并对各项功能进行了测试。通过请教老师和同学们,我们完成的进度越来越快.A今天在编写文件存取功能上遇到了一些麻烦。通过查阅相关书籍,将文件的相关功能函数问题解决了.黄晨茹今天设计了输出车辆信息库函数,开始显示的每组数据上下都没对齐.后来运用了域宽函数出色的解决了每组数据的对齐格式,使显示更加漂亮.C今天对车辆信息编辑功能进行了调试,并着手准备PPT的制作.对开始编写的代码进行了再次测试,发现添加功能函数的一个漏洞。(即当添加一个卡车、大客车、小轿车之外的车时,还会添加车辆)周三:我们在今天将课程设计的整体设计功能函数全部编完,并能够编译运行,只是还残留有一些小细节没有解决。A今天将剩余的删除功能、编辑功能等编写完毕。并对所有代码进行了大致的注释,使他人读代码时能快速明白设计的思路。黄晨茹今天将各功能函数的运行结果和错误代码进行了截图,还将错误代码的原因进行了解释,以方便完成接下来的实验报告.C对所有函数功能进行了调试。将有错的功能函数的代码进行修改。最后在删除车辆功能函数遇到一个小问题。(即删不掉系统里的最后一辆车,但文件的删除了)周四:我们小组通过在一起讨论分析,最后终于将那个删除函数功能代码彻底修复。程序可以完全无误地实现所有功能并运行。我们离胜利已经不远了。A今天将程序的源代码进行了优化,将重复的代码进行了更改替换,使代码相对较简洁一些.并辅助C一起做PPT.黄晨茹今天在一起讨论分析代码错误中,突然一语道破那个困扰我们许久的问题,让我们激动万分,因为这就意味着程序设计代码彻底完成。她也开始编写实验报告。C今天在讨论出错误后,赶紧进入紧张的PPT制作中,为了让周五的PPT演示更成功,他不断地进行优化PPT界面.最终完成了,时间已经到第二天凌晨了。周五:我们一同上台进行了PPT演示和课程设计答辩,在答辩完成,黄晨茹开始撰写课程设计报告,A和C辅助黄晨茹完成。最终报告完成,大家的身上的担子彻底没了。虽然课程设计完成,大家都意识到团队合作的优势,确定了今后的目标。#include"stdio.h"#include"conio.h”#include"stdlib。h"#include”string。h”#defineN1000 //N为可输入的学生总人数,可根据需要更改#defineM2 //M为宏定义的(在创建密码函数中)可建立的登陆用户个数,可更改 structstudent //定义学生信息结构体数组{ charnum[9];//学号 charname[20];//姓名 chardepar[15];//院系 charzhuanye[15];//专业 charclasses[5]; //班级 charage[3];//年龄 charsex[4];//性别 charnation[5]; //民族 charbirth[9];//出生日期 charadd[10];//籍贯};structcode //定义密码结构体数组{ charname[20]; charcode[7];}co[M],s0;//确认是否新创建密码文件模块intcode() { FILE*fp; if((fp=fopen(”学生学籍管理系统__code。txt”,"rt"))==NULL) { printf(”密码文件不存在,请输入新的用户名及密码:\n"); //若不存在此密码文件,则提示用户创建密码 printf(”请输入任意键继续!”); getch(); system(”cls"); return1; //无密码文件返回1 } else return0; //已有密码文件返回0}//新创建初始密码voidcode_input() { FILE*fp; inti; if((fp=fopen(”学生学籍管理系统__code.txt”,"wt"))==NULL); //当建立密码文件成功时,进入for循环 for(i=0;i<M;i++) //M为宏定义的可建立的登陆用户个数,可更改 { printf("请录入第%d个用户名:",i+1); //创建不同的用户名及密码 scanf("%s”,co[i]。name); printf(”请录入第%d个密码(最多6位):",i+1); scanf(”%s”,co[i].code); printf("\n"); fwrite(&co[i],sizeof(structcode),1,fp); //将密码保存进文件中 } fclose(fp); getch(); system(”cls");} //用户登陆验证模块intenter(charname1[20],charcode1[6]) { FILE*fp; intflog=0; inti; fp=fopen(”学生学籍管理系统__code。txt",”rt");//打开存放密码的文件 for(i=0;i〈M;i++) { fread(&co[i],sizeof(structcode),1,fp); //读密码文件 if((strcmp(name1,co[i].name)==0)) //如果输入的用户名与已存在用户名相同,再比较密码是否相同,否则进行下一个用户名的比较 { if((strcmp(code1,co[i].code)==0))//比较此用户名下的密码是否一致 return1; //验证成功后回到主函数 } } if(i〉=M) //当比较完成后,都没有符合条件的用户名与密码,则直接跳出程序 printf("******您无权进入此管理系统!!!*****"); fclose(fp); getch(); exit(1);}//从文件读入数据intread_file(structstudentstu[]) { FILE*sp; inti=0; system(”cls"); if((sp=fopen("学生学籍管理系统__学生信息。txt”,”rt"))==NULL)//读文件,若文件不存在,则需要创建一个新的文件(文件创建在save_file函数中完成) { printf(”\n学生学籍管理系统__学生信息文件不存在,请创建!\n”); getch(); system(”cls"); return0; } while((fread(&stu[i],sizeof(structstudent),1,sp))==1)//判断文件是否处在结束位置 { if(stu[i]。num==0) //若文件内容为空,则跳出循环 break; else //若文件内容不为空,i自加1。 i++; //i为文件内结构体数组的数量 } fclose(sp); returni; //返回i值,代表文件中学生的人数}//保存学生信息(保存在文件中)voidsave_file(structstudentstu[],intsum){ FILE*sp; inti; if((sp=fopen("学生学籍管理系统__学生信息。txt","wb"))==NULL)//若不存在此TXT文档,则创建; { printf("读文件错误!\n"); //创建不成功,返回menu函数; return; } for(i=0;i<sum;i++) if(fwrite(&stu[i],sizeof(structstudent),1,sp)!=1) //保存文件,sum为现有总学生人数,若未保存成功,提示"写文件错误!"; printf(”写文件错误!\n"); fclose(sp); return;}//创建并录入信息intfound(structstudentstu[]) { inti=0,x; system("cls"); printf(”请输入要录入的学生的个数:\n"); scanf(”%d",&x); if(x==0) return0; do //输入信息 { printf("\n请录入第%d个学生的信息:\n",i+1); printf("请录入学号:”); scanf(”%s",stu[i]。num); printf(”\n请录入姓名:”); scanf("%s",stu[i].name); printf(”\n请录入院系:"); scanf(”%s",stu[i]。depar); printf(”\n请录入专业:"); scanf("%s",stu[i].zhuanye); printf("\n请录入班级:"); scanf(”%s”,stu[i]。classes); printf(”\n请录入性别:”); scanf("%s",stu[i].sex); printf("\n请录入年龄:”); scanf("%s”,stu[i].age); printf("\n请录入出生日期(yyyymmdd):"); scanf("%s”,stu[i]。birth); printf("\n请录入民族:"); scanf(”%s",stu[i]。nation); printf(”\n请录入籍贯:”); scanf("%s",stu[i]。add); i++; system(”cls”); }while(i〈x); //当i>=x(用户要求创建学生的人数)时,跳出输入信息的for循环; save_file(stu,x); //保存学生信息致文件 printf(”录入完毕,请按任意键返回"); getch(); returni; //返回创建学生的人数}//修改学生信息voidmodify(structstudentstu[],intsum) { inti,item,a=1; //i控制数组下标,item控制子菜单的选择 chars1[8]; FILE*sp; system(”cls”); read_file(stu,sum); //读函数 do { printf(”\n\n\n请输入你要修改的学号:\n"); scanf(”%s",s1); //要修改的学生学号 for(i=0;i〈sum;i++) //查找此学生 { if(strcmp(stu[i]。num,s1)==0) //若找到该生,输出该生的信息 { printf("该学生学号:%s\n”,stu[i].num); printf(”该学生姓名:%s\n",stu[i].name); printf(”该学生院系:%s\n”,stu[i]。depar); printf("该学生专业:%s\n",stu[i].zhuanye); printf("该学生班级:%s\n”,stu[i].classes); printf("该学生性别:%s\n",stu[i].sex); printf("该学生年龄:%s\n",stu[i]。age); printf(”该学生出生日期:%s\n”,stu[i]。birth); printf(”该学生民族:%s\n",stu[i]。nation); printf("该学生籍贯:%s\n",stu[i].add); a=0; //找到该生,a=0; break; //出for循环 } } if(a==1) //若没有找到该生,a=1,输出提示语句 printf(”\n\n该学号不存在!请重新输入学号:\n"); }while(a); //当a=0,即没有找到该生,则继续循环重新输入学生学号 printf(”\t****************\n"); printf(”\t你选择你要修改的选项:\n"); printf("\t1。*修改姓名\n"); printf("\t2.*修改年龄\n"); printf("\t3.*修改性别\n"); printf(”\t4.*修改出生日期\n”); printf("\t5.*修改籍贯\n");printf("\t6.*修改院系名称\n”); printf("\t7.*修改专业名称\n"); printf("\t8.*修改班级\n”); printf(”\t9。*修改民族\n”); printf(”\t0。*退出菜单\n"); printf(”\t****************\n"); while(1) { printf(”\n\t请选择你要进行的操作:"); scanf(”%d”,&item); ///item控制子菜单的选择switch(item){case1: //修改姓名 printf(”\t请输入新的姓名:”); scanf(”%s",stu[i].name); printf("\n\n\n修改成功!\n"); save_file(stu,sum); break; case2: //修改年龄 printf(”\t请输入新的年龄:”); scanf("%s”,stu[i]。age);printf(”\n\n\n修改成功!\n"); save_file(stu,sum); break;case3: //修改性别 printf("\t请输入新的性别:”); scanf("%s",stu[i]。sex); printf(”\n\n\n修改成功!\n"); save_file(stu,sum); break; case4: //修改出生日期 printf("\t请输入新的出生年月(yyyy.mm):"); scanf("%s”,stu[i].birth);printf(”\n\n\n修改成功!\n”); save_file(stu,sum); break; case5: //修改籍贯 printf("\t请输入新的籍贯:”); scanf("%s",stu[i].add); printf("\n\n\n修改成功!\n"); save_file(stu,sum); break; case6: //修改院系 printf("\t请输入新的院系:"); scanf("%s”,stu[i].depar);printf(”\n\n\n修改成功!\n"); save_file(stu,sum); break; case7: //修改专业 printf("\t请输入新的专业名称:"); scanf(”%s”,stu[i]。zhuanye);printf(”\n\n\n修改成功!\n"); save_file(stu,sum); break; case8: //修改班级 printf("\t请输入新的班级:”); scanf("%s",stu[i].classes);printf(”\n\n\n修改成功!\n”); save_file(stu,sum); break; case9: //修改民族 printf(”\t请输入新的民族名称:"); scanf(”%s",stu[i].nation);printf(”\n\n\n修改成功!\n"); save_file(stu,sum); break; case0:return; //不修改,退出 default:printf("\t请在0到9之间选择:”); //若输入的值不在0~9,则提示 } }}//查询学生信息voidseek(structstudentstu[],intsum) {inti,item,flag; //i控制数组下标,item控制子菜单的选择,flag为判断条件chars1[11];system("cls");while(1){ system("cls");printf(”\n\n\t\t--——-—---————----—\n”);printf("\t\t1。按学号查询\n");printf(”\t\t2.按姓名查询\n");printf("\t\t3.退出本菜单\n”);printf("\t\t---———---——-—-----\n”);printf("\t\t请选择子菜单编号:”);scanf(”%d",&item); //选择子菜单flag=0;switch(item){case1: //按学号进行查找printf("\t\t请输入要查询的学生的学号:”);scanf(”%s",s1);for(i=0;i〈sum;i++)if(strcmp(stu[i]。num,s1)==0) //判断学号是否存在{ //输出 flag=1; printf(”该学生学号:%s\n",stu[i]。num); printf(”该学生姓名:%s\n”,stu[i].name); printf(”该学生院系:%s\n",stu[i]。depar); printf(”该学生专业:%s\n”,stu[i]。zhuanye); printf(”该学生班级:%s\n”,stu[i].classes); printf("该学生性别:%s\n",stu[i]。sex); printf(”该学生年龄:%s\n",stu[i]。age); printf("该学生出生日期:%s\n",stu[i].birth); printf(”该学生民族:%s\n",stu[i].nation); printf(”该学生籍贯:%s\n",stu[i]。add); getch();}if(flag==0) //当上一个if条件不成立,flag=0,学生学号不存在,输出提示;printf("\n\n\n\t\t该学号不存在!\n”); getch();break;case2: //按姓名进行查找printf(”\n\n\t\t请输入要查询的学生的姓名:”);scanf(”%s”,s1);for(i=0;i<sum;i++)if(strcmp(stu[i]。name,s1)==0) //判断姓名是否存在{ //输出flag=1; printf(”该学生学号:%s\n",stu[i]。num); printf("该学生姓名:%s\n”,stu[i].name); printf("该学生院系:%s\n”,stu[i]。depar); printf(”该学生专业:%s\n",stu[i]。zhuanye); printf(”该学生班级:%s\n",stu[i].classes); printf("该学生性别:%s\n”,stu[i].sex); printf("该学生年龄:%s\n",stu[i].age); printf(”该学生出生日期:%s\n”,stu[i].birth); printf("该学生民族:%s\n”,stu[i].nation); printf("该学生籍贯:%s\n",stu[i]。add); getch();}if(flag==0) //当上一个if条件不成立,flag=0,学生姓名不存在,输出提示;printf(”\n\n\n\t\t该姓名不存在!\n"); getch();break;case3: system(”cls");return;default:printf(”\n\n\n\t\t请在1-3之间选择\n"); //若输入的值不在1~3,则提示 getch(); }}}//删除某学生信息intdel(structstudentstu[],intsum) {inti,j,flag=0;chars1[9];system(”cls");printf("\n\n\t\t请输入要删除学生的学号:");scanf(”%s",s1);for(i=0;i〈sum;i++)if(strcmp(stu[i]。num,s1)==0) //判断学号是否存在 {flag=1; //该学号存在,用后一个数组覆盖此数组,循环,即可删除for(j=i;j〈sum—1;j++) stu[j]=stu[j+1];}if(flag==0) //该学号不存在printf("\n\n\t\t该学号不存在!\n”); getch();if(flag==1) //删除成功,输出提示{printf("\n\n\n\t\t删除成功\n”);getch(); sum——; //删除成功,sum自-1;} save_file(stu,sum); //保存 returnsum; //返回删除后存在的学生人数}//显示打印已有学生信息voidshow(structstudentstu[],intsum) {inti;system("cls”);printf("\n\n\t\t所有学生的信息为:\n");for(i=0;i<sum;i++) //for循环打印信息{ printf(”学号:%s\t",stu[i].num); printf(”姓名:%s\t",stu[i]。name); printf(”院系:%s\t”,stu[i]。depar); printf(”专业:%s\t",stu[i].zhuanye); printf("班级:%s\t”,stu[i]。classes); printf("性别:%s\t”,stu[i].sex); printf(”年龄:%s\t",stu[i]。age); printf("出生日期:%s\t”,stu[i]。birth); printf(”民族:%s\t",stu[i].nation); printf(”籍贯:%s\n\n”,stu[i].add); } printf("按任意键返回”);getch(); system("cls”);}//添加学生信息intinsert(structstudentstu[],intsum) { inti,j,flag,m; FILE*sp; system("cls”); printf("\t请输入要添加的学生的个数:”); scanf(”%d”,&m); read_file(stu); //在添加前读文件 do{ flag=1; i=sum; //此时i表示数组下标,添加学生,保存到当前已有数组的下一个,sum为总数,stu[i]表示第sum+1个人 while(flag) { flag=0; printf("\n\n请输入第%d个学生的学号:",i+1); scanf("%s",stu[i]。num);for(j=0;j〈i;j++) //判断此学号是否存在 if(strcmp(stu[i].num,stu[j].num)==0) { printf("\n\n\n该学号已有,请重新输入!\n”); flag=1; break; /*如果该学号已有则立刻对出该层for循环*/ } } printf("\n请输入第%d个学生的姓名:”,i+1);scanf(”%s",stu[i]。name); printf("\n请输入第%d个学生的院系:”,i+1);scanf(”%s",stu[i].depar);printf("\n请输入第%d个学生的专业:”,i+1);scanf("%s”,stu[i]。zhuanye);printf("\n请输入第%d个学生的班级:”,i+1); scanf("%s",stu[i]。classes); printf("\n请输入第%d个学生的性别:”,i+1); scanf(”%s”,stu[i]。sex); printf("\n请输入第%d个学生的年龄:",i+1);scanf(”%s",stu[i].age);printf("\n请输入第%d个学生的出生日期:”,i+1);scanf("%s",stu[i]。birth);printf("\n请输入第%d个学生的民族:”,i+1);scanf(”%s",stu[i]。nation);printf(”\n请输入第%d个学生的籍贯:”,i+1);scanf(”%s",stu[i]。add);if(flag==0){i=i;i++;}}while(i〈sum+m); //当下标i小于sum+m时,循环继续,stu[sum+m]指向添加全部学生后所用数组的下一个单元sum+=m; //添加完毕后,学生总人数变为sum+m; printf(”\n\n\n\n\n\n\n\n\t\t\t\t录入完毕!"); save_file(stu,sum); //保存getch(); system(”cls"); returnsum; //返回添加完成后现有的学生人数}//对学生信息排序voidrank(structstudentstu[],intsum) {inti,j; FILE*sp; structstudents1;system(”cls”);for(i=0;i<sum—1;i++) //对学生信息按照学号用选择排序法进行排序 for(j=i+1;j<sum;j++)if(strcmp(stu[i]。num,stu[j]。num)>0) //小者换到stu[i] { s1=stu[i]; stu[i]=stu[j]; stu[j]=s1; } printf("\n\n\t\t所有学生的信息为:\n");for(i=0;i<sum;i++) //打印排好后的学生信息{ printf(”学号:%s\t”,stu[i]。num); printf(”姓名:%s\t",stu[i]。name); printf("院系:%s\t",stu[i]。depar); printf("专业:%s\t",stu[i]。zhuanye); printf(”班级:%s\t”,stu[i].classes); printf("性别:%s\t",stu[i]。sex); printf(”年龄:%s\t”,stu[i].age); printf(”出生日期:%s\t",stu[i].birth); printf("民族:%s\t",stu[i]。nation); printf(”籍贯:%s\n\n",stu[i].add); } printf("按任意键返回”);getch(); system(”cls”);}//对班级的学生人数进行统计voidcount(structstudentstu[],intsum) { inti,count=0; chars1[5],s2[5],s3[5]; system("cls”);printf("\t\t请输入你要统计学生人数的学院:”); scanf(”%s",s1); printf("\t\t请输入你要统计学生人数的专业:"); scanf(”%s”,s2); printf("\t\t请输入你要统计学生人数的班级:"); scanf(”%s",s3); for(i=0;i〈sum;i++) if(strcmp(s1,stu[i].depar)==0&&strcmp(s2,stu[i].zhuanye)==0&&strcmp(s3,stu[i].classes)==0) //判断条件 count++; //count为符合条件的学生人数 printf(”%s学院%s专业%s班级的学生人数为:%d人”,s1,s2,s3,count); getch();}//菜单函数voidmenu(){ intchoice,sum; structstudentstu[N]; sum=read_file(stu); //sum为现已存入文件中学生的人数 do { system(”cls”); printf(”\n\n\n"); printf(”\t\t**********欢迎进入**********\n”); printf("\t\t********学生学籍管理系统********\n\n\n”); printf(”\t\t\t1.创建学生信息\n"); printf("\t\t\t2。修改学生信息\n”); printf(”\t\t\t3。查询学生信息\n”); printf(”\t\t\t4.删除学生信息\n"); printf(”\t\t\t5.添加学生信息\n"); printf("\t\t\t6.保存学生信息\n”); printf("\t\t\t7。显示已录入学生信息\n”); printf(”\t\t\t8.对学生信息排序\n"); printf(”\t\t\t9。统计学生信息\n"); printf(”\t\t\t0.退出程序\n”); printf("\t\t\t请选择您要执行的操作(0~9):"); scanf("%d",&choice); switch(choice) { case1:sum=found(stu); break; //sum=创建后所存储的学生人数 case2:modify(stu,sum); break; //修改 case3:seek(stu,sum); break; //查询 case4:sum=del(stu,sum); break; //sum=删除学生后所存储的学生人数 case5:sum=insert(stu,sum); break; //sum=添加学生后所存储的学生人数 case6:save_file(stu,sum); break; //保存文件 case7:show(stu,sum); break; //显示 case8:rank(stu,sum); break; //排序 case9:count(stu,sum); break; //统计某班级学生人数 case0: break; } }while(choice!=0);}voidmain(){ intflag=0; flag=code(); //确认是否新创建密码文件。若没有存放密码的文件,则flag=1,若有,flag=0; if(flag) //判断if条件是否成立 code_input(); //当flag=1,即没有存放密码的文件时,进入code_input()函数,创建用户名及密码;当flag=0,则不用新建密码; printf(”*******请输入你的用户名及密码*******:\n"); //登陆该管理系统前需身份验证 scanf(”%s%s”,,s0。code); //输入用户的用户名及密码 enter(,s0。code); //登陆管理系统前,进入enter()函数验证模块 system(”cls”); menu();}课程报告课程名称:程序设计实践专业班级:计科1401学生姓名:牛草原学号:202116010101任课教师:张玉宏学期:2021-2021学年第二学期课程报告任务书题目图书信息管理系统主要内容开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息(也可以根据自己情况进行扩充,比如是否借出、库存量等).使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能(至少一种查询方式)、排序功能(至少一种排序方式):①按书名查询②按作者名查询=3\*GB3③按照价钱排序=4\*GB3④按出版时间排序等等(4)图书信息的删除与修改扩展功能:可以按照自己的程度进行扩展。比如(1)简单的权限处理(2)报表打印功能(3)甚至根据自己情况,可以加上学生信息和借阅信息的管理,并扩充为图书借阅系统。(4)模糊查询(5)综合查询(6)统计功能比如统计处某一类别的图书信息或筛选出小于指定数量库存的图书信息等等,总之,可以根据自己需求进行分析功能。任务要求一、提交材料应包括:(1)系统源代码(2)课程报告二、整个设计过程具体要求(1)需求分析要求学生对案例系统进行分析,设计出需要完成的功能,完善各个模块的调用关系;(2)设计过程要求学生进一步明确各模块调用关系,进一步完善模块函数细节(函数名、参数、返回值等)(3)实现过程要求学生养成良好的编码习惯、完成各个模块并进行测试,最终完成系统整体测试;(4)总结阶段按照要求完成系统设计和实现报告,并进行总结、答辩。成绩评定报告撰写情况(30分)系统完成情况(30分)答辩情况(40分)总分内容20分规范程度5分程序测试5分基本功能20分扩展功能10分自述情况10分答辩情况30分成绩评定教师:目录引言.。。。。.。。。。.。.。。。。。。.。。..。..。。..。..。。.。。...。。.。。.。..。.3绪论.。。..。.。。.。。.。。。。。。.。.....。...。.。..。.。。....。..。..。。..3需求分析。..。。.。.。。。。.。....。。.。。.。。.。..。..。。。。..。。.。。.。.3概要设计..。..。.。。。。。。。。.。。。.。。.。。。..。.。。。。。。。..。。.。。..。52.1数据结构。.。..。。...。。..。。.。。..。。。。..。。。..。。。。..。..。..。。..。。.。.。.......。52.2数据需求.。.。...。...。.。.。。。..。。。。..。。....。.。。.。..。。。.....。..。。.。。..。...52。3模块划分。。.。。。.。。。..。。。..。..。.。.。。。。。。。..。..。.。。.。.。。。。.。...。.。。。。。。..52.4程序总体框架.。.。。。....。。。。。。..。.。。。...。...。.。。.。。。.。。.。..。.。。..。。。...。6三.详细设计...。..。。。。.。。。.。...。..。。..。...。。。...。..。。。。。。。。。.。。。。。。。。。.。。。.。.。63.1登陆界面。..。...。。.。.。..。.。..。。。。。...。。。.。.。.。.。.。。。.。。.。。..。...。.。.。..73.2功能服务.。。...。。.。.。。.。。...。。。。。.。。。...。..。.。。。.。。。..。.。。....。。。。.。.。21四.调试分析。...。。.。.。.。。。.。。。...。。.。。。。...。。。。..。.。...。。。48五.程序不足与改进.。.。。。。。。。...。........。。.。....。.。。。。。...49六。课程心得总结.。..。.....。。。。..。。。。.。.。。.。。。。.。。。.。。.。。。。49引言经过对程序设计题目的分析可知,整个程序的设计实现大致可以分为五个模块,其中每个模块对应一个函数,他们分别是:图书的添加函数voidadd_book(void);删除图书的函数voiddelete_book(void);查询图书的函数voidinquire_book(void);对图书进行修改的函数voidrevise_book(void);以及对图书进行排序的函数voidsort_book(void);在这几个函数中,其功能的实现严格按照题目的要求:1图书信息录入函数:主要功能是从键盘上输入图书信息并将其写入文件中,作为图书馆的书库。以便对以下的函数进行运行,此函数应是整个程序的基础。2查询图书函数:主要功能是按照一定的图书特征(图书名,图书作者)先将图书查询到。3删除图书函数:主要功能是将已存图书按照一定的图书特征(图书编号,图书名,图书作者,图书出版日期等)先将图书查询到,然后删除.4图书排序函数:主要功能是将已存图书按照一定的图书特征将图书进行详细的排序,具体可以分为按图书名排序,按图编号排序;按图书出版日期排序,按图书价格排序。5图书的修改函数:功能是将已录入的图书的编号,作者,出版日期,价钱等进行修改。6退出函数:该函数主要实现退出运行界面的功能。绪论整个程序的设计实现大致可以分为五个模块,其中每个模块对应一个函数,他们分别是:图书的添加函数voidadd_book(void);删除图书的函数voiddelete_book(void);查询图书的函数voidinquire_book(void);对图书进行修改的函数voidrevise_book(void);以及对图书进行排序的函数voidsort_book(void);1需求分析开发一个图书信息管理系统,图书信息包括:图书编号、书名、作者、出版社、类别、出版时间、价格等基本信息。使之能提供以下基本功能:(1)图书信息录入功能(图书信息用文件保存)--输入(2)图书信息浏览功能--输出(3)查询功能、排序功能:①按书名查询②按作者名查询=3\*GB3③按照价钱排序=4\*GB3④按出版时间排序图书信息的删除与修改学生登录和管理员登陆退出系统程序扩展:管理员功能:①学生信息管理1:学生卡添加2:学生卡信息查询3:学生卡密码查询4:学生卡删除②图书信息管理(8)学生功能:①图书信息查询通过此次课程设计,可以使我们增强自己的动手能力,并可以使自己编写的程序与程序之间的衔接更为自然,同时可以提高我们使用计算机解决实际问题的能力,了解并掌握C语言开发程序的全过程。此外还可以较为综合地提高自己C语言编程能力及调试能力和自己对C语言语法的进一步认知,为自己的后续课程打好基础。二概要设计2。1数据结构该程序设计采用结构体和文件操作,用于实现对图书信息的存储,修改,查询及排序等功能.2.2数据需求该程序需要系统输入及输出图书的编号,图书名,图书作者,图书出版日期以及图书价格等数据。2。3模块划分该程序总体上分为6个模块,分别为:学生登录系统模块,管理员登陆系统模块,图书信息录入模块,图书信息修改模块,图书信息删除模块,图书信息查询模块及图书信息排序模块,学生卡添加模块,学生卡删除模块,学生卡信息查询模块,学生卡密码查询模块。其中图书信息查询模块分为按书名查询,作者名字查询。图书排序系统分为按图书编号排序,按图书价格排序,按图书出版时间排序。各个模块之间相互独立但彼此之间有相互依附,通过彼此之间有规律的相互调用及参数的传递从而实现整个程序较为综合的功能。简言之:(1)voidmain_menu(void); 主菜单(2)voidstudent(void); 学生登录函数(3)intstu_login(void); 学生登录验证(4)voidstu_find(void); 学生图书查询函数voidbook_search_name(void); 书名查找voidbook_search_author(void); 作者查找3。voidinquire_book(void); 查询图书(输出所有图书)(5)voidadministrar(void); 管理员登录模块(6)intadm_login(void); 管理员登录验证(7)voidad_st_menu(void); 学生信息管理菜单1.voidadd_card(void); 申请新学生卡2.voiddelete_card(void); 删除学生卡3。voidpasswordlookup(void); 学生卡密码查询4.voidinquire_stu(void); 查询学生卡(输出所有学生卡信息)(8)voidad_bk_menu(void); 图书信息管理菜单1。voidadd_book(void); 添加图书2。voiddelete_book(void); 删除图书3。voidrevise_book(void); 修改图书4.voidinquire_book1(void); 输出所有图书,管理员使用.5.voidsort_book(void); 图书排序菜单①.voidsort_book_num(void); 图书排序——编号②.voidsort_book_price(void); 图书排序——价格③.voidsort_book_time(void); 图书排序——出版时间2.4程序总体框架(如图2.4—1)主界面主界面退出退出学生登录学生登录管理员登陆学生登录学生登录管理员登陆图书管理学生信息管理图书查询图书管理学生信息管理图书查询查询图书按作者查找按书名查找输出所有图书查询图书按作者查找按书名查找输出所有图书修改图书删除图书添加图书查询学生卡查询卡号密码删除卡号申请新卡号修改图书删除图书添加图书查询学生卡查询卡号密码删除卡号申请新卡号图书排序图书排序按编号排序按出版时间排序按价格排序按编号排序按出版时间排序按价格排序图2。4-1三详细设计3.1登陆界面:(1)基

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论