已阅读5页,还剩16页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C 语 言 课 程 实 习 报 告 实验设备信息管理系统设计一、题目要求实验设备信息包括:设备编号、设备种类(如微机、打印机、扫描仪等)、设备名称、设备价格、设备够入日期、是否报废等。试设计一实验设备信息管理系统,使之能够提供以下功能:(1) 能够完成对设备的录入和修改。(2) 对设备进行分类统计。(3) 设备的查询。 二、需求分析实验设备信息用文件储存,提供文件的输入输出操作;要完成设备的录入和修改需要提供设备添加和修改操作;实现对设备的分类统计,需要提供排序操作;实现对设备的查询需提供查找操作,设备的查询可根据设备编号、设备种类、设备名称、设备够人日期、正常设备(未报废的)等多种方式查询;另外还要提供键盘式选择才菜单以实现功能选择。 三、总体设计整个系统可设计为实验设备信息输入模块、实验设备信息添加模块、实验设备信息修改模块、实验设备分类统计模块和实验设备查询模块。(系统功能模块如图1所示) 实验设备管理系统信息输入 信息添加 信息修改 分类统计 设备查询 图1 四、详细设计 1主函数主函数一般设计得比较简洁,只提供输入、处理和输入部分的函数调用。其中各功能模块菜单方式选择。其流程图如图2所示。程序 void menu() /*主界面*/void enter();void add();void modify();void statistic();void browse();开 始void search();int n,w1;显示一系列功能选项do puts(tt*MENU*nn);输入n,判断n是否是0-9?puts(tttt1.Enter new data); /*输入模块*/ puts(tttt2.Addition data); /*添加模块*/puts(tttt3.Modify data); /*修改模块*/puts(tttt4.Statistic); /*统计模块*/puts(tttt5.Browse all); /*浏览模块*/puts(tttt6.Search); /*查找模块*/根据n的值调用各功能模块函数puts(tttt7.Exit); /*退出模块*/puts(nntt*n); puts(Choice your number(1-7):bb);scanf(%d,&n);结束 if(n7) /*对数字的选择判断*/w1=1;getchar(); else w1=0; 图2 while(w1=1);/*选择功能*/switch(n)case 1:enter();break;case 2:add();break;case 3:modify();break;case 4:statistic();break;case 5:browse();break;case 6:search();break;case 7:exit(0); /*主函数*/main()menu();2各功能模块设计 (1)输入模块 【数据结构】:单独看设备编号、种类、名称、日期是字符型(其中日期可用下划线来连接比较方便),价格用整型。实验设备信息用文件存储,一条记录对应一台设备,既符合习惯也方便信息管理。由此可将实验设备信息采用结构体的形式。把设备的编号、种类、名称、日期、价格作为结构体成员,如果要存放若干个设备信息就用结构体数组。struct equickment开始 char num11;输入用户要输入设备记录个数 char kind20; char name20; int price; char buy_date30;I从0到n-1调用输入函数input(I) char unuse_date30;equN;/*equN中每个数组元素对应一台实验设备程序/*输入模块*/I!=0?void enter() int n,i; printf(How many equickments(0-%d)?:,N-1);Y scanf(%d,&n); /*要输入的记录个数*/返回主菜单保存调用函数save(n) for(i=0;in;i+) printf(n Input%dth equickment record.n,i+1); input(i); /*调用输入函数*/ 结束 if(i!=0)save(n); /*调用保存函数*/ printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/ 图(2)(2)添加模块 需求分析该模块的功能是用户需要增加新的设备记录,从键盘输入并逐条写到原来的输入文件中,注意采用添加而不是覆盖的方式。添加流程图如图4所示。程序/*添加模块*/void add()int i,n,m,k; FILE*fp; n=load(); printf(How many equickments are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); /*输入要添加的记录个数*/ k=m+n; for(i=n;ik;i+) printf(n Input %dth equickment record.n,i-n+1); input(i); /*调用输入函数*/ if(fp=fopen(information.txt,ab)=NULL) /*以ab的方式打开文件,添加保存*/ printf(cannot open filen); for(i=n;ik;i+) if(fwrite(&equi,sizeof(struct equickment),1,fp)!=1) /*输出到文件*/ printf(file write errorn); fclose(fp); printf_back(); /*一个任务结束时让用户选择是浏览还是返回*/(3)修改模块需求分析该模块的功能是显示所有设备信息,考虑到记录较多,建议采用分屏显示。显示完所有记录后,用户输入要修改设备的编号,根据编号查找设备记录,并提示用户修改该记录的哪部分信息,是编号、名称或其他,根据用户的选择修改相应信息。程序/*修改模块*/void modify()struct equickment e; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnRemember NO.which needed modify.pass any key to continue.);getch();puts(nn); printf_one(i); do printf(nnEnter NO.taht you want to modify! NO.:); scanf(%s,e.num); for(i=0;in;i+) if(strcmp(e.num,equi.num)=0)k=i; e=equi; if(k=-1)printf(nnNO exit!please again); while(k=-1); printf_face(); printf_one(k); w1=modify_date(k,n); if(w1=1) printf(nSuccessful _.nnAre you modify another?nnt1).Yes 2).Back with savetbb); scanf(%d,&w0); w2=1; else w0=0; if(w2=1)equk=e; if(w0!=1&w2=1) save(n); while(w0=1); menu();(4)统计模块程序/*统计模块*/void statistic() int i,j,n,t; char str1=computer,str2=printer,str3=NO; n=load(); for(i=0;in;i+) for(j=i+1;jequj.price) t=i;i=j;j=t; for(i=0;in;i+) if(strcmp(equi.unuse_date,str3)=0) printf(Equckiment can be used!n); if(strcmp(equi.kind,str1)=0) printf(kind 1:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else if(strcmp(equi.kind,str2)=0) printf(kind 2:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(kind 3:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(Equckiment can not be used!n); if(strcmp(equi.kind,str1)=0) printf(kind 1:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else if(strcmp(equi.kind,str2)=0) printf(kind 2n); printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(kind 3);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date);(4) 查找模块需求分析该模块的功能是根据输入的设备的名称查找相应的记录,找到以后,可进行增加、删除或修改信息的操作。流程图如图5所示。void search()int n; int m,k,w1=1,c,w3,w4; int load(); void save(int n); int modify_date(int k,int n); n=load(); do do k=-1; do puts(1.Printf_numn); puts(2.Printf_kindn); puts(3.Printf_namen); puts(4.Printf_buy_daten); puts(5.Printf_usen); printf(Chioce your number(1-5):bb); scanf(%d,&m); if(m5) w1=1;getchar(); else w1=0; while(w1=1); switch(m)case 1:printf_num(n);break; case 2:printf_kind(n);break; case 3:printf_name(n);break; case 4:printf_buy_date(n);break; case 5:printf_use(n);break; if(k=-1) printf(nn NO exist!please); printf(nnAre you again?nt 1).again 2).NO and back bb); scanf(%d,&w1); k=-1; while(k=-1&w1=1); w4=0;w3=0; if(k!=-1) printf(What do you want to do?nt 1).Search another 2).Modify 3).Delete 4).Back menu bb); scanf(%d,&c); switch(c) case 1:w3=modify_date(k,n);break; case 2:printf(nAre you sure?nt 1).Sure 2).No and back bb); scanf(%d,&w4); if(w4=1) equk.price=0; break; if(w3=1|w4=1) save(n); printf(nnSuccessful._.); printf(nnWhat do you want to do?nt 1).Search another 2).Back bb); scanf(%d,&c); while(c=1); menu();3公共函数下面介绍一些在每个功能模块都可能用到的公共函数。(1) 保存函数save(int n)说明形参n控制保存的个数。程序void save(int n) /*保存函数,保存n个记录*/FILE*fp; int i; if(fp=fopen(information.txt,w)=NULL) /*以只读的方式打开一个文件*/ printf(nCannot open filen); exit(0); for(i=0;in;i+) if(fwrite(&equi,sizeof(struct equickment),1,fp)!=1) printf(file write errorn); fclose(fp);(2) 输入整个记录函数input(int i)说明形参I表示第I个设备记录。程序void input(int i) no_input(i,i); printf(kind:); scanf(%s,equi.kind); printf(name:); scanf(%s,); printf(price:); scanf(%d,&equi.price); printf(buy_date:); scanf(%s,equi.buy_date); unuse_date_input(i,i);(3) 浏览函数程序void browse() int i,n; int load(); void printf_one(int i); n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnPass any key to contiune .); getch(); puts(nn); printf_one(i); printf(t There are %d record.n,n); printf(nPass any key to back .); getch(); menu();(4) 删除函数程序void del()struct equickment e; int i,n,k,w0=1,w1,c=0; n=load(); do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnRemember NO.which needed del.pass any key to continue.); getch(); puts(nn); printf_one(i); do printf(nnEnter NO.that you want to del! NO.:); scanf(%s,e.num); for(i=0;in;i+) if(strcmp(e.num,equi.num)=0) k=i; e=equi; if(k=-1)printf(nnNO exist!please again); while(k=-1); equk.price=0; printf(nnAre you sure?1).Delete 2).Back with savet bb); scanf(%d,&w1); if(w1=1) printf(nSuccessful _.nnAre you del another?nnt1).Yes 2).Back with savetbb); scanf(%d,&w0); c=1; else w0=0; if(c=1) equk=e; if(w0!=1&c=1) save(n); while(w0=1); menu();(5) 显示数据结构项目函数void printf_face()printf(ntNO. kind name price buy_date unuse_daten);(6) 显示一个记录的函数void printf_one(int i) printf(%11s %s %-17s %d %s %sn,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date);(7) 一个任务结束时选择浏览还是返回函数void printf_back()int w; printf(nntSuccessful._nn); printf(What do you want to do?nnt1).Browse all nowt2).Back: bb); scanf(%d,&w); if(w=1) browse(); else menu();(8) 加载函数int load()FILE*fp; int i; if(fp=fopen(information.txt,r)=NULL) printf(nCannot open filen); exit(0); for(i=0;!feof(fp);i+) fread(&equi,sizeof(struct equickment),1,fp); fclose(fp); return(i-1);4总程序#include#include#include#include#define N 20void menu()void enter();void add();void modify();void statistic();void browse();void search();int n,w1;doputs(tt*MENU*nn);puts(tttt1.Enter new data);puts(tttt2.Addition data);puts(tttt3.Modify data);puts(tttt4.Statistic); puts(tttt5.Browse all); puts(tttt6.Search); puts(tttt7.Exit); puts(nntt*n); puts(Choice your number(1-7):bb); scanf(%d,&n); if(n7)w1=1;getchar(); else w1=0;while(w1=1);switch(n)case 1:enter();break;case 2:add();break;case 3:modify();break;case 4:statistic();break;case 5:browse();break;case 6:search();break;case 7:exit(0); main()menu();struct equickment char num11; char kind20; char name20; int price; char buy_date30; char unuse_date30;equN;void no_input(int i,int n)int j,k,w1; dow1=0; printf(NO.:); scanf(%s,equi.num); for(j=0;equi.numj!=0;j+) if(equi.numj9) puts(Input error!Only be made up of (0-9).Please reinput!n);w1=1;break; if(w1!=1) for(k=0;kn;k+) if(k!=i&strcmp(equk.num,equi.num)=0) puts(This record is exist.please reinput!n);w1=1;break; while(w1=1);void unuse_date_input(int i,int n)int w; char unuse_date30; char s=NO; printf(Does this equickment use or not?nnt1).Yest2).Non); scanf(%d,&w); if(w=2)printf(Enter unuse_date);printf(unuse_date:);scanf(%s,equi.unuse_date); else strcpy(unuse_date,s);printf(unuse_date:);printf(%s,unuse_date);void input(int i) no_input(i,i); printf(kind:); scanf(%s,equi.kind); printf(name:); scanf(%s,); printf(price:); scanf(%d,&equi.price); printf(buy_date:); scanf(%s,equi.buy_date); unuse_date_input(i,i);void save(int n)FILE*fp; int i; if(fp=fopen(information.txt,w)=NULL) printf(nCannot open filen); exit(0); for(i=0;in;i+) if(fwrite(&equi,sizeof(struct equickment),1,fp)!=1) printf(file write errorn); fclose(fp);void printf_back()int w; printf(nntSuccessful._nn); printf(What do you want to do?nnt1).Browse all nowt2).Back: bb); scanf(%d,&w); if(w=1) browse(); else menu();int load()FILE*fp; int i; if(fp=fopen(information.txt,r)=NULL) printf(nCannot open filen); exit(0); for(i=0;!feof(fp);i+) fread(&equi,sizeof(struct equickment),1,fp); fclose(fp); return(i-1);void add()int i,n,m,k; FILE*fp; n=load(); printf(How many equickments are you want to add(0-%d)?:,N-1-n); scanf(%d,&m); k=m+n; for(i=n;ik;i+) printf(n Input %dth equickment record.n,i-n+1); input(i); if(fp=fopen(information.txt,ab)=NULL) printf(cannot open filen); for(i=n;inn 1).NO. 2).kind 3).name 4).price 5).buy_date 6).unuse_date 7).cancel and back); printf(Which you needed?:bb); scanf(%d,&c); if(c7|c7|c1); do switch(c) case 1:no_input(i,n);break; case 2:printf(kind);scanf(%s,equi.kind);break; case 3:printf(name);scanf(%s,);break; case 4:printf(price);scanf(%d,equi.price);break; case 5:printf(buy_date);scanf(%s,equi.buy_date);break; case 6:unuse_date_input(i,n);break; puts(nNow:n); printf_face(); printf_one(i); printf(nAre you sure?nnt1).Sure 2).No and remodify 3).Back without save in this time bb); scanf(%d,&w1); while(w1=2); return(w1);void enter()int n; int i; printf(How many equickments(0-%d)?:,N-1); scanf(%d,&n); for(i=0;in;i+) printf(n Input%dth equickment record.n,i+1); input(i); if(i!=0)save(n); printf_back();void modify()struct equickment e; int i,n,k,w0=1,w1,w2=0; n=load(); do k=-1; printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnRemember NO.which needed modify.pass any key to continue.);getch();puts(nn); printf_one(i); do printf(nnEnter NO.taht you want to modify! NO.:); scanf(%s,e.num); for(i=0;in;i+) if(strcmp(e.num,equi.num)=0)k=i; e=equi; if(k=-1)printf(nnNO exit!please again); while(k=-1); printf_face(); printf_one(k); w1=modify_date(k,n); if(w1=1) printf(nSuccessful _.nnAre you modify another?nnt1).Yes 2).Back with savetbb); scanf(%d,&w0); w2=1; else w0=0; if(w2=1)equk=e; if(w0!=1&w2=1) save(n); while(w0=1); menu();void statistic() int i,j,n,t; char str1=computer,str2=printer,str3=NO; n=load(); for(i=0;in;i+) for(j=i+1;jequj.price) t=i;i=j;j=t; for(i=0;in;i+) if(strcmp(equi.unuse_date,str3)=0) printf(Equckiment can be used!n); if(strcmp(equi.kind,str1)=0) printf(kind 1:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else if(strcmp(equi.kind,str2)=0) printf(kind 2:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(kind 3:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(Equckiment can not be used!n); if(strcmp(equi.kind,str1)=0) printf(kind 1:);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else if(strcmp(equi.kind,str2)=0) printf(kind 2n); printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date); else printf(kind 3);printf(%s %s %s %d %s %s,equi.num,equi.kind,,equi.price,equi.buy_date,equi.unuse_date);void browse() int i,n; int load(); void printf_one(int i); n=load(); printf_face(); for(i=0;in;i+) if(i!=0)&(i%10=0) printf(nnPass any key to contiune .); getch(); puts(nn); printf_one(i); printf(t There are %d record.n,n); printf(nPass any key to
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026公安巡逻面试题及答案
- 2026班主任个人述职报告(3篇)
- 预备党员思想报告2026(3篇)
- 脂肪肝患者的饮食维生素补充
- 2026年中考地理(成都卷)真题详细解读及评析
- 七年级劳动教育上册家庭记账课|收支记录
- 产后妈妈产后恢复食谱
- 《英语反对表达|disagree object oppose》
- 产后出血的护理风险管理
- 房地产估价师考试题库及答案(庆阳2026年)
- 2025年贵州省初、中级专业技术资格考试(给排水)历年参考题库含答案详解(5卷)
- 2024版电网典型设计10kV配电站房分册
- 招标采购专家管理办法
- 广东研学实践活动方案
- 移动升降车培训考试试题及答案
- T/CCMA 0112-2021全断面隧道掘进机用盾尾密封刷
- T电梯修理考试题(附答案)
- 出版合同的书稿保密协议
- 2025年福建周宁县宁福工贸发展有限公司招聘笔试参考题库含答案解析
- 华为VDBD价值驱动业务设计体系实战
- 2025年上半年设备工作总结模版(二篇)
评论
0/150
提交评论