c语言课程设计之实验设备管理系统

上传人:无*** 文档编号:84632145 上传时间:2022-05-04 格式:DOC 页数:20 大小:399KB
收藏 版权申诉 举报 下载
c语言课程设计之实验设备管理系统_第1页
第1页 / 共20页
c语言课程设计之实验设备管理系统_第2页
第2页 / 共20页
c语言课程设计之实验设备管理系统_第3页
第3页 / 共20页
资源描述:

《c语言课程设计之实验设备管理系统》由会员分享,可在线阅读,更多相关《c语言课程设计之实验设备管理系统(20页珍藏版)》请在装配图网上搜索。

1、目录目录 -1 -一设计目的 -2 -二课程设计的内容 -2 -三课程设计的要求与数据 -2 -四课程设计应完成的工作 -2 -五总体设计(包含几大功能模块 流程图) -2 -六详细设计(各功能模块的具体实现算法 流程图) -3-七调试分析(包含各模块的测试用例,及测试结果) -8-八总结 -17 -九成员设计内容 -17-十参考资料 -17 -一:设计目的练习与巩固 C 语言程序设计)理论知识,通过实践检验和提高实际能力,进一步 培养自己综合分析问题和解决问题的能力。掌握运用 C 语言独立地编写、调试应用 程序和进行其它相关设计的技能。二:课程设计内容实验室设备管理系统:课程设计要求实验设备

2、信息包括:设备编号,设备种类 (如:微机、打印机、扫描仪等等 ) ,设 备名称,设备价格,设备购入日期,是否报废,报废日期等。主要功能 :1 完成对设备信息的录入函数2 完成修改某个设备信息的函数3 根据给定信息对设备进行分类统计4 设备的破损耗费和遗损处理(删除某个指定设备)5 设备的查询四:课程设计应完成的工作(1) 编写算法;(2) 算法测试,并有具体的测试结果和结果分析;(3) 撰写课程设计报告。内容包括:1) 封面扉页2) 设计任务书3) 目录4) 总体设计方案(包括流程图)5) 使用说明及运行实例(包括界面)6)成员设计内容简介7)项目源程序代码(注意注释的使用)8)指导教师评语五

3、总体设计(包含几大功能模块)1、功能1 :打开一个设备信息文件,并读取2、功能2:添加新的设备内容并保存3、功能3:统计设备数量4、功能4:查找符合条件的设备及其数量并将其显示出来5、功能5:对设备信息按条件进行分类排序6、功能6:修改设备信息7、功能7:删除某条设备记录&功能&显示内容六:详细设计关闭文件图1系统框图MMMMMMMMMMMMMMMMNMMMMMMMtleilU笙加鎏匪需实验设备的类实验设番的*亠厕除某条记录 7 -豆示设备文件中首行为回行图2菜单图思路:使用文件的方式读取和写入设备信息,文件保存在一个固定路径,并以固定的名称进行读取和修改,因此对文件名和路径进行宏定义。设备内

4、容根据需求定义了结构体如下:struct in strume ntchar id10,kin d10, name10,price10,in_date10,reject10,out_date10;结构体内元素分别为编号、种类、名称、价格、购入日期、是否报废、报废期限等,为了方 便操作均以字符串的形式进行保存。以下为程序重要功能图:(1) 对文件的操作FILE *fp;fp=fope n( ,a);a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的 数据会被加到文件尾,这种用法是为了主要是用于添加新的信息在文件末端,用在添加设备函数内。fp=fope n(, r);以只

5、读方式打开,用在需要读取设备信息的函数的内。fp=fope n(,w);以只写形式打开,用于需要改动信息并保存的函数图3文件操作流程图以上是对文件的读取,读取完成后便可以进行内容的操作。(2) 添加函数additem()fp=fopen(,”a);/a以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾图4添加操作流程图(3) 统计文件内信息量load()(检测到EOF返回行该函数用于统计文件内设备数量以便于读取,当文件内设备读取到空行 数。流程图:+1图5文件尾检测流程图(4) 查找 check()在读取出文件内容后比对条件进行查找,如果符合条件输出

6、,由于内容均以字符串的方式保存,因此便于查找。图6查找操作流程图(5) 分类 sort()按某种条目进行分类也是需要通过查找相同,但不同的是条目的具体内容是不确定的,只是把条目内容相同的部分进行排序使其归类在一起,使用了冒泡排序法。由于是使用字符串, 所以排序的依据是根据 ASCII码顺序。(6) 修改 modify()原理:在读取文件保存在内存后,按行选择修改某一行即修改结构体数组的某一元素,在将其写入到文件中。图7修改操作流程图(7)删除 delect()读取文件内容,但读写时跳过需要删除的行不读,然后把读取出的内容重新写入文件图8删除操作流程图(8)显示数据函数show()图9显示操作流

7、程图七:调试分析7.1 源程序及注释 以下为程序重要功能函数: (1)对文件的操作(使用文件流操作相关函数) FILE *fp;fp=fopen(,a);a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的 数据会被加到文件尾 ,这种用法是为了主要是用于添加新的信息在文件末端,用在添加设 备函数内。fp=fopen(,r); 以只读方式打开,用在需要读取设备信息的函数的内。fp=fopen(,w); 以只写形式打开,用于需要改动信息并保存的函数内。读取文件(部分程序) (对行数据部分使用可以连续分割字符串 strtok 函数,还有字符串复 制函数 memccpy)读

8、取文件用于显示和修改char mystring2100,*t=; i=load();/ 读取文件数量 if(i=-1|i=0)/ 如果文件打开失败或文件内没有内容 printf(cant open no data);return;for(n=0;ni;n+)fgets (mystring2,100,fp);/ 按行的方式一行行显示文件 该程序段出现过的问题:由于统计上面统计文件行数的函数的问题导致漏读。 以上程序段只是按行读取文件, 并没有对没一行文件内容,如编号、种类等区分出来, 上面 适用于单纯的显示设备信息( show ()函数)。在要对文件信息进行改动的函数内,还需要 把行内容按结构体

9、内容进行读取, 加上以下函数段, 采用了字符函数对行内容进行分割和复 制 即可。if(n!=0) memccpy(a,strtok(mystring2,t),;,10);memccpy(eupn.id,strtok(NULL,t),NULL,10); / 将行内容以 ; 分割,并把分割返回的值以 10 个字节形式返回else memccpy(eupn.id,strtok(mystring2,t),;,10); memccpy(eupn.kind,strtok (NULL,t),NULL,10); memccpy(eupn.name,strtok (NULL,t),NULL,10); memcc

10、py(eupn.price,strtok (NULL,t),NULL,10); memccpy(eupn.in_date,strtok (NULL,t),NULL,10); memccpy(eupn.reject,strtok (NULL,t),NULL,10);memccpy(eupn.out_date,strtok (NULL,t),NULL,10);fclose(fp);以上是对文件的读取,读取完成后便可以进行内容的操作。 问题:起初因为要求里没要求用文件方式保存所以没有用文件写了一个程序,但后来写了1/3 想了想应该不会那么简单就改用文件,结果浪费了很多时间。但用了文件的方式后发现 有

11、些函数写起来更加简单。 例如在删除函数, 如果不用文件而将数据保存在内存中时要删除 就得对链表进行修改,而改用文件后只需要把跳过删除的数据把数据重新写入文件。此外, 用了文件的方式后不用处理链表这样困难的结构。( 2)添加函数 additem()FILE *fp; / 打开文件fp=fopen(,a); /a 以附加的方式打开只写文件。若文件不存在,则会建立 该文件,如果文件存在,写入的数据会被加到文件尾printf( 请输入编号: );scanf(%s,into.id);printf(n);printf( 请输入种类: );scanf(%s,into.kind);printf(n);prin

12、tf( 请输入名称: );scanf(%s,into.name);printf(n);j=0;doprintf( 请输入价格 :);scanf(%s,into.price);printf(n);j=isnumber(into.price);if(j=0) printf( 输入错误 n);while(j=0);j=0;doprintf( 请输入购入日期: );scanf(%s,into.in_date);printf(n);j=isnumber(into.in_date);if(j=0) printf( 输入错误 n);while(j=0);printf( 是否报废 (写 Y 或 N):);sc

13、anf(%s,into.reject);j=0;doprintf( 请输入报废期限 :);scanf(%s,into.out_date);printf(n);j=isnumber(into.out_date);if(j=0) printf( 输入错误 n);while(j=0);if(load()!=0)fprintf(fp,r);fprintf(fp,t%st%st%st%st%st%st%strn,into.id,into.kind,into.name,into.pr ice,into.in_date,into.reject,into.out_date);fclose(fp);printf

14、(nnt 添加成功 nn);函数出现过的问题:由于 n ,rn 的分不清一开始每一行的结尾使用 n 的,导致下面读取时 会少一行,通过网络查阅资料后,在第一行前加 r, 每行末尾加 rn 解决了问题。(3)统计文件内信息量 load()该函数用于统计文件内设备数量以便于读取,当文件内设备读取到空行(检测到EOF返回行数。int load(char file)char c;int h=0;FILE *fp;fp=fopen(file,r);if(fp=NULL)return -1;/ 表示文件打开错误fseek(fp,0,0);while(c=fgetc(fp)!=EOF)if(c=n)h+;e

15、lseif(c=EOF)h+;break;fclose(fp);return h;该函数出现过的问题: 起初有时无法正确读取文件, 原因是在 additem 这个函数里添加的格 式不对,把 additem 这个函数改后就可以了。(4)查找 check() 在读取出文件内容后比对条件进行查找, 如果符合条件输出, 由于内容均以字符串的方式保 存,因此便于查找。if(i=1)/i 为输入的查找条目 for(n=0,k=0;nj;n+)if(strcmp(q,eupn.id)=0)/=0, 符合条件并输入printf( 在文件中第 %d 行 n,n);printf( “n ”);printf(%s;

16、%s;%s;%s;%s;%s;%s;n,eupn.id,eupn.kind,eupn.name,eupn.price,eupn.in_date,eupn.reject,eupn.out_date);k+;/ 这个是用来统计符合条件设备的数量的 if(k=0) printf(has no datan);( 5)分类 sort()按某种条目进行分类也是需要通过查找相同, 但不同的是条目的具体内容是不确定的, 只是 把条目内容相同的部分进行排序使其归类在一起,使用了冒泡排序法。由于是使用字符串, 所以排序的依据是根据ASCII码顺序。if(c=3) for(n=0;nj-1;n+)for(k=0;k

17、j-1-n;k+) if(strcmp(eupk.reject,eupk+1.reject)0) exchange=eupk;eupk=eupk+1; eupk+1=exchange;( 6)修改 modify()原理: 在读取文件保存在内存后, 按行选择修改某一行即修改结构体数组的某一元素, 在将 其写入到文件中。printf(n 输入你要修改的设备的行数 ! nn 实验设备的行数 :); scanf(%d,&n);printf(n 找到要修改的设备 ! n);b=2;doprintf(n 请输入你要修改的 1:编号 2:种类 3 : 名称 4:价格 5:购入日期 废 7 :报废期限 :n)

18、;scanf(%d,&c);switch(c)case 1: printf( 请输入编号: );scanf(%s,eupn.id); printf(n);break;case 2:printf( 请输入种类: );scanf(%s,eupn.kind);printf(n);break;case 3: printf( 请输入名称: );scanf(%s,eupn.name);printf(n);break;case 4:printf( 请输入价格: );scanf(%s,eupn.price);printf(n);break;case 5:f=0;doprintf( 请输入购入日期 :);sca

19、nf(%s,eupn.in_date);printf(n);f=isnumber(eupn.in_date);if(f=0) printf( 输入错误 n);while(f=0);printf(n);break;case 6:printf( 是否报废 (写 Y 或 N): );scanf(%s,eupn.reject); printf(n);break;case 7: f=0;doprintf( 请输入报废期限 :);scanf(%s,eupn.out_date);printf(n);f=isnumber(eupn.out_date);if(f=0) printf( 输入错误 n);while

20、(f=0);printf(n);break;default :break;printf( 接下来 1:对该设备信息修改完成 2:还需要对该设备进行修改 n);scanf(%d,&b);while(b!=1)&(b!=2)printf( 输入错误,接下来 1:对该设备信息修改完成 2:还需要对该设备进行修改 scanf(%d,&b);while(b=2);fp=fopen(,w);fseek(fp,0,0);fprintf(fp,t%st%st%st%st%st%st%strn,eup0.id,eup0.kind,eup0.name,eup0.price ,eup0.in_date,eup0.r

21、eject,eup0.out_date);for(n=1;nj-1) printf( 输入的行数大于实际行数 ,重新输入 ); scanf(%d,&i);fp=fopen(,r);fseek(fp,0,0);/ 以行为单位一行行的读取,但最多肚100 个字节for(n=0;nj;n+)if(n!=i) if(k=0) fgets(mystring2n,100,fp);else fgets(mystring2n-1,100,fp);elsefgets (stri,100,fp);k=1;fclose(fp);fp=fopen(,w); fseek(fp,0,0);for(n=0;nj-1;n+)

22、 fprintf(fp,%s,mystring2n);fclose(fp);( 8)显示数据函数 show()char mystring2100,*t=; i=load();/ 读取文件数量 if(i=-1|i=0)/ 如果文件打开失败或文件内没有内容prin tf(ca nt ope nno data);return;for(n=0;nep-e7 cjinpLi.-t 於壬 j? ; MriJ eontuci * J/對 *窓50RRs20120911 sn S20140H22 snouo |;n )211 J22on;1008S;2 012 0411;n;2 O15O&22; nyi ;

23、23 B0 ; 20150644 ; n ; 2 Q1 & B3 2 2 ;44 SZtll4MV23 ;ytt站k宿同n ftp!斗Hi宿同世储利倩站科宿肖*筒tt健理旌性*M-rr图10显示内容界面图(2) 修改 modify()界面;1 a 71 ; 4-; lwonovO S t1 bCMi ;n ;Mnl VM S 汙:v 45 v 1? o u. hF jLrii rt w 7 e-pEZon ? X000012 0X2 B4JL X S ini ;/20X0G2 2 ;f; LN tz wc aSsorfejjvS 00 匸 N0 占务盃峠 T ; rt 卡左聶 JL壬立;I 1

24、I u讣口祜七京尸員y*沦斗幵1RRIg v,污1 1耳4科左盜i諭入你娄骤改的邈旨的*r古知亦酚设帝的行敝找到莊紇改的说备请肃雙缶尊夢舞改的韻信电i肯4前入丰中歹i 口口了i古百隔入宅、爭Fn ; 201&0322 ;174:i 34 ; cnmpiLrr; i 44 ; ZPI1; ; 2FI1 4F1AZZ &图12修改结果(3) 删除 delect()行毗4S亍匚耳尬曰玄丘0 -左:!至电专1 v n p 2 0.1 4君:去 ,con ;t2Mx 2411 ; 2丄 5 0622 ; RT3 =m34三clhwqiaI卍世於:tf ih ;260 ;ND_LS0644 n ; 2导J

25、.各0322 ; iiT* =3-1 uu*ivli4uiw *2-1-1 .261-16*723 W ; 2 01 -168 22 |7妾册!I降那糸甘才r3图13删除界面删除后7_;145; camera;soni/;5000;2B12G911:n ;2S14S822 ;彳fl::23:puM;on;4000;20150211:N;2020112S:行鑒;45 ; tzouLJLngfi ;epson ; 13000; 20120411;n;201S0622;34 co nputor244; 2fii4fi92 3 ;;2B14fi422;图14修改界面(4) 添加 addItem()r

26、iLo-1-y 巳. i削4和入斗中出. #1輛H入-台才朱 1* 4ewA_f/i 相匚illMtlik入il勾L入曰 貝H 丄 aOJ_3IO3jLJ_轩削_入_牛民耳冃FFL r 工直laiiai* 春力口月返图15添加界面7彳亍阳;145;canei;son 1/;5B00 ;20120911 ;n ;2014S822 ; 行1::23:ps3;sonp;40S0;20150211;N;2O201126;1f2 =;45 ; tDULyingfii.; epson ; 13003 ; 20120411 ;in50622 ;彳亍i4;computer;;244;20140923 ;2O1

27、4C$22 i= X f s t *n -4 udlmzEJTTrs TITS Jr Tn7M 彳彳彳彳图16添加前f无氐亟至”豆f耳on. f HiHH ;把1411去kiy 1霊ft匸空kWMH处豊gp3; 4Qiie ; siisaxx H?22exi0;Louf lih ii ;丄 B000 i 立BJL20622 ;compiit円话托3: y S JSH-! -IFIRiaS! i;屮生畔;片力is u f L ;址HL ,理,址梢141址謎;图17添加后(4) 查找 check()孑當舒尝需襲3:名称 北购入日期输入内容2h般no触師11_ab 11, |1、 亠 iI、广图18

28、界面翦倉条篇襲囂名称4:购入日朗L龜入内容!4圧哀件中第4行!去国;y?4;nicrv?oFt;&983;29130211;N;210S0122;图19查找结果(5) 分类 sort()1:按名称前按种类3:按是否报废图20分类界面说明:看倒数第二列数据,部分大小写fl =4&;tDuyiny ;epsor; 10000;20120411 ; n ;20150&22; f2:145;GanBrA;sony;5000;201209il;n;20140322;亍鉄254;p?4 smicrosoft;5000;20130211iN;21000122 i f4:23;ps3;sori;4000;20

29、L5021L;N;2020L120;图21分类结果八:总结(1)在出现问题时可以利用多种渠道获得帮助,可以向老师咨询和借助网络。(2)出现问题时需要去分析问题的现象,从现象去考虑可能引起问题的地方。(3)进行调试或编程时采取一步步循序渐进的办法先完成一个子功能,在把一个个功能 整合起来。总结:通过这次的课程设计, 大大的丰富了我的 C语言知识,并对这门课程有了进一步的了 解,在我们这个专业里也占有很重要的地位。我知道仅仅学习课本知识是远远不够的,还需要通过实践来检验和提高。通过这次的任务,我进一步的掌握了 C语言的一些基本知识,但 同时也知道这还是远远不够的,还需要通过更多的实践来掌握更多的知识。同时,这个课程也培养了我的编程习惯,让我能更好的编写和解决问题。九:成员设计内容成员:1陈太斌:所有十:参考资料1 谭浩强.C程序设计(第三版)M.北京:清华大学出版社2 谭浩强.C程序设计题解与上机指导(第三版)M.北京:清华大学出版社,2005.3 郭翠英.C语言课程设计案例精编:中国水利水电出版社,20044 Cqzl24ENW7V5bPui_ABtlgUfX4y9OCXvopmw1vDS74h oKd41fLJV3S Te,2012.07.24,2008.10.08,2011.11.23

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!