1、山东建筑大学课 程 设 计 成 果 报 告题 目: 实验设备管理系统设计课 程: 程序设计基础院 (部): 管理工程学院专 业: 班 级: 学生姓名: 学 号: 指导教师: 完成日期: 1目录1 设计目的12 设计任务内容13 系统总体设计24 系统详细设计24.1 主函数24.2 录入记录44.3 浏览记录44.4 查询记录54.4.1 按编号查找64.4.2 按实验设备名称查找64.5 删除记录84.6 修改记录94.7 排序记录104.8 保存记录104.9 插入记录115 调试与测试126 课程设计心得与体会157 参考文献168 附录17261 设计目的本课程设计是信息管理与信息系统
2、专业重要的实践性环节之一,是在学生学习完程序设计基础课程后进行的一次全面的综合练习。本课程设计的目的和任务:1、巩固和加深学生对C语言课程的基本知识的理解和掌握;2、掌握C语言编程和程序调试的基本技能;3、利用C语言进行基本的软件设计;4、掌握书写程序设计说明文档的能力;5、提高运用C语言解决实际问题的能力。2 设计任务内容4、实验设备管理系统设计相关信息包括:设备编号、设备种类(如:计算机、打印机、扫描仪等)、设备价格、购入日期、是否报废、报废日期等(设备编号唯一)。系统要求实现如下功能:1)系统功能以菜单方式工作;2)数据的添加,以两种方式添加:从键盘直接输入和从现有文件中读取数据;3)数
3、据的插入:从指定位置插入一条记录;4)数据的输出,以两种方式输出:在屏幕上直接输出和输出数据到文件中;5)数据的删除;6)数据的查找,通常以两种方式进行查找,如姓名、记录号(或学号、职工号等);7)数据的排序;8)退出系统。3 系统总体设计4 系统详细设计1设备管理的录入记录(如设备编号,设备名称等)2设备管理的浏览记录(可以清楚地看出每条记录信息)3设备管理的查询记录(可以按编号等信息进行查询)4设备管理的删除记录(可以任意删除不需要的信息)5. 设备管理的修改记录(对不正确的信息进行修改)6. 设备管理的排序记录(按编号对信息进行排序)7. 设备管理的保存记录(保存输入过的每一条详细信息)
4、8. 设备管理的插入记录(可任意把信息插入到需要到位置)9. 退出,保存4.1 主函数主函数中用到了简单的输出与输入,用到了case的选择性语句,较简单.运用了循环语句,难度中等,内容较长,比较烦琐.int main( ) /* 主函数 */int choose=0,i;for(i=0;iMAX;i+)EQUIPFlagi=0;Read( );while(1)system(cls);printf(nt*);printf(nt* 欢迎进入实验设备信息管理系统 *n);printf(t* *n);printf(t* 1: 实验设备信息录入 *n);printf(t* 2: 实验设备信息浏览 *n)
5、;printf(t* 3: 实验设备信息查询 *n);printf(t* 4: 实验设备信息删除 *n);printf(t* 5: 实验设备信息修改 *n);printf(t* 6: 实验信息的排序 *n);printf(t* 7: 实验设备信息保存 *n);printf(t* 8: 实验设备信息插入 *n);printf(t* 9: 退出 *n);printf(t* *n);printf(t*n);printf( 请选择相应的操作 :);scanf(%d,&choose);switch(choose)case 1:Add( ); /* 实验设备信息录入 */break;case 2:Prin
6、t( ); /* 实验设备信息浏览 */break;case 3:Search( ); /* 实验设备信息查询 */break;case 4:Delete( ); /* 实验设备信息删除 */break;case 5:Modify( ); /* 实验设备信息修改 */break;case 6:order( ); /* 实验信息的排序 */break;case 7:Save( ); /* 实验设备信息保存 */break; case 8:inset();/插入break;case 9:exit(0);default:break; return 0;4.2 录入记录该函数难度一般,其中用到了简单的
7、输入输出。void Add( ) /* 录入数据 */printf(请输入编号:);scanf(%s,temp.ID);printf(请输入实验设备名称:);scanf(%s,temp.EQUIP_Name);printf(请输入 实验设备的设备价格:);scanf(%lf,&temp.Price);printf(请输入实验设备种类:);scanf(%s,temp.Kind); printf(请输入购买日期:);scanf(%s,temp.DP); printf(请输入是否报废:);scanf(%s,temp.YN); printf(请输入报废日期:);scanf(%s,temp.DR);EQ
8、UIPEQUIPIndex=temp;EQUIPFlagEQUIPIndex=1;EQUIPSum+; EQUIPIndex+;printf(录入成功!n);getch();4.3 浏览记录可以对信息一目了然,简单直接。void Read( ) /* 浏览数据 */FILE *pfile= NULL; char bufSIZE; if(pfile = fopen(EQUIP.txt, r) = NULL) printf( 读取信息失败 !n); return; while(fgets(buf, SIZE, pfile)fscanf(pfile,%s,EQUIPEQUIPIndex.ID);fs
9、canf(pfile,%s,EQUIPEQUIPIndex.EQUIP_Name);fscanf(pfile,%lfn,&EQUIPEQUIPIndex.Price);fscanf(pfile,%s,EQUIPEQUIPIndex.Kind); fscanf(pfile,%s,EQUIPEQUIPIndex.DP); fscanf(pfile,%s,EQUIPEQUIPIndex.YN); fscanf(pfile,%s,EQUIPEQUIPIndex.DR); EQUIPFlagEQUIPIndex=1;EQUIPSum+;EQUIPIndex+; EQUIPSum-;EQUIPIndex-
10、;fclose(pfile);return;4.4 查询记录可方便的对进行要查找的设备进行操作,难度一般,本函数用到了简单的循环语句.void Search( ) /* 查找 */int choose=0;while(1)system(cls);printf(nnn);printf( 1: 按实验设备编号查询nn);.printf( 2: 按实验设备名称查询nn);printf( 3: 返回nn);printf(请选择:);scanf(%d,&choose);switch(choose)case 1:SearchByID( );break;case 2:SearchByEQUIP_Name(
11、);break;case 3:return;default:break; return;4.4.1 按编号查找可简单的设备编号进行查找.void SearchByID( ) /* 按编号查找 */char idSIZE;int i=0;printf(n输入编号:);scanf(%s,id);for(i=0;i=EQUIPIndex) printf(查找失败n);else if(EQUIPFlagi=0) printf(查找失败n);else printf(n查找成功:n);printf(n编号 实验设备名称 设备价格 实验设备种类 购买日期 是否报废 报废日期n);printf(%st%st%
12、6.2ftt%st%st %st %s,EQUIPi.ID,EQUIPi.EQUIP_Name,EQUIPi.Price,EQUIPi.Kind,EQUIPi.DP,EQUIPi.YN,EQUIPi.DR); printf(n);getch( );return;4.4.2 按实验设备名称查找输入设备名称,对其进行查找.void SearchByEQUIP_Name( ) /* 按实验设备名称查找 */char EQUIP_NameSIZE;int i=0,j=0;printf(n请输入实验设备名称:);scanf(%s,EQUIP_Name);for(i=0;iEQUIPIndex;i+)if
13、(strcmp(EQUIPi.EQUIP_Name,EQUIP_Name)=0)if(EQUIPFlagi!=0)j=1;printf(n编号:%st实验设备名称:%sn,EQUIPi.ID,EQUIPi.EQUIP_Name);printf(n编号 实验设备名称 设备价格 实验设备种类 购买日期 是否报废 报废日期n);printf(%st%st%6.2ftt%st%st %st %s,EQUIPi.ID,EQUIPi.EQUIP_Name,EQUIPi.Price,EQUIPi.Kind,EQUIPi.DP,EQUIPi.YN,EQUIPi.DR);if(j=0) printf(查找失败n
14、);printf(n);getch( );return;void Modify( ) /* 修改 */char idSIZE;int i=0;printf(请输入编号:);scanf(%s,id);for(i=0;i=EQUIPIndex) printf(查找失败n);else if(EQUIPFlagi=0) printf(查找失败n);elseprintf(查找成功:n);printf(n编号 实验设备名称 设备价格 实验设备种类 购买日期 是否报废 报废日期n);printf(%st%st%6.2ftt%st%st %st %s,EQUIPi.ID,EQUIPi.EQUIP_Name,E
15、QUIPi.Price,EQUIPi.Kind,EQUIPi.DP,EQUIPi.YN,EQUIPi.DR);printf(n开始修改:n);printf(请输入编号:);scanf(%s,temp.ID);printf(请输入实验设备名称:);scanf(%s,temp.EQUIP_Name);printf(请输入设备价格:);scanf(%lf,&temp.Price);printf(请输入实验设备种类:);scanf(%s,temp.Kind);printf(请输入购买日期:);scanf(%s,temp.DP);printf(请输入是否报废:);scanf(%s,temp.YN);pr
16、intf(请输入报废日期:);scanf(%s,temp.DR);EQUIPi=temp; printf(n);return;4.5 删除记录对设备信息进行删除操作.本函数较为简单,仅用到了简单的输入输出.void Delete( ) /* 删除 */char idSIZE;int i=0;printf(请输入编号:);scanf(%s,id);for(i=0;i=EQUIPIndex) printf(查找失败n);else if(EQUIPFlagi=0) printf(查找失败n);else printf(n查找成功:n);printf(n编号 实验设备名称 设备价格 实验设备种类 购买日
17、期 是否报废 报废日期n);printf(%st%st%6.2ftt%st%st %st %s,EQUIPi.ID,EQUIPi.EQUIP_Name,EQUIPi.Price,EQUIPi.Kind,EQUIPi.DP,EQUIPi.YN,EQUIPi.DR); EQUIPSum-;EQUIPFlagi=0;printf(n);printf(删除成功n); printf(n);getch( );return;4.6 修改记录此修改函数运用到了if-else循环语句、输入输出等简单的函数。目的是为了对设备名称、设备种类等相关信息进行修改。void Modify( ) /* 修改 */char
18、idSIZE;int i=0;printf(请输入编号:);scanf(%s,id);for(i=0;i=EQUIPIndex) printf(查找失败n);else if(EQUIPFlagi=0) printf(查找失败n);elseprintf(查找成功:n);printf(n编号 实验设备名称 设备价格 实验设备种类 购买日期 是否报废 报废日期n);printf(%st%st%6.2ftt%st%st %st %s,EQUIPi.ID,EQUIPi.EQUIP_Name,EQUIPi.Price,EQUIPi.Kind,EQUIPi.DP,EQUIPi.YN,EQUIPi.DR);p
19、rintf(n开始修改:n);printf(请输入编号:);scanf(%s,temp.ID);printf(请输入实验设备名称:);scanf(%s,temp.EQUIP_Name);printf(请输入设备价格:);scanf(%lf,&temp.Price);printf(请输入实验设备种类:);scanf(%s,temp.Kind);printf(请输入购买日期:);scanf(%s,temp.DP);printf(请输入是否报废:);scanf(%s,temp.YN);printf(请输入报废日期:);scanf(%s,temp.DR);EQUIPi=temp; printf(n);
20、return;4.7 排序记录使用了函数的调用使整个程序更好的运行,整个程序变的简单易懂。对信息进行排序,使之更加有序。void order() /*排序函数*/int i,x,e;struct EQUIP EQU;for(i=0;iEQUIPIndex-1;i+)x=i;for(e=i+1;e0)x=e;if(x!=i)EQU=EQUIPi;EQUIPi=EQUIPx;EQUIPx=EQU;Save();Print();4.8 保存记录保存信息,防止信息的丢失。void Save( ) /* 保存数据 */int i=0;FILE *pfile= NULL; if(pfile = fopen
21、(EQUIP.txt, w+) = NULL) printf( 保存信息失败 !n); return; for(i=0;i0)fprintf(pfile,n);fprintf(pfile,%sn,EQUIPi.ID);fprintf(pfile,%sn,EQUIPi.EQUIP_Name);fprintf(pfile,%lfn,EQUIPi.Price);fprintf(pfile,%sn,EQUIPi.Kind); fprintf(pfile,%sn,EQUIPi.DP); fprintf(pfile,%sn,EQUIPi.YN); fprintf(pfile,%sn,EQUIPi.DR);
22、 printf( 保存成功 !n);getch( );fclose(pfile);4.9 插入记录在任意位置插入记录。void inset()/插入设备信息int i,n,x,y=1;printf(请输入要插入的位置:);scanf(%d,&x);for(i=0;i=i;n-)EQUIPn+1=EQUIPn;printf(t请输入设备的编号:); scanf(%s,EQUIPx-1.ID); printf(t请输入设备的名称:); scanf(%s,EQUIPx-1.EQUIP_Name); printf(t请输入设备的分类:); scanf(%s,EQUIPx-1.Kind); printf
23、(t请输入购买日期:); scanf(%s,EQUIPx-1.DP); printf(t请输入是否报废:); scanf(%s,EQUIPx-1.YN); printf(t请输入报废时间:); scanf(%s,EQUIPx-1.DR); printf(t请输入该设备的价格:); fflush(stdin); scanf(%f,&EQUIPx-1.Price); EQUIPIndex+;printf(n是否继续插入(1继续;0退出插入):);fflush(stdin);scanf(%d,&y);if(y!=1)y=0;break;Save();5 调试与测试 1.目录(见下图)2.录入设备信息
24、(见下图)3.浏览设备信息4.查找设备信息-A按实验设备编号查找. (见下图) B按实验设备名称查找(见下图) 5设备信息的删除. (见下图)6.设备信息的修改. (见下图)7.设备信息的排序.(见下图)8.设备信息的插入(见下图)6 课程设计心得与体会C语言课程设计,在老师和同学们的帮助下终于完成了!在老师的耐心教导下使我学会了很多。我个人认为C语言的课程设计是比较困难的,需要付出很多的时间来完成。在课程设计的过程中,我认识到了一点,那就是程序编程不是一两天所能完成的。程序编程要一步一步的完成。首先,程序编程要有总体的思路,要明确自己想要做什么,朝着目标勇敢向前走!把程序分成几个块儿,即多个
25、函数,一块一块的编写。然后将分散的函数用另外的函数联系起来。到这一步程序就初步完成了,之后就是调试和检查错误。最后我认为还可以对编好程序进行修改和添加,使之更有人性化。通过这次课程设计虽然编程的途中是非常辛苦的。但是我认为这次机会给了我一次锻炼的机会!7 参考文献1刘甫迎、刘光会、王蓉.C#程序设计教程(第2版).北京:电子工业出版社,2008 2Microsoft Visual C# 2008 help,20083美国微软公司Visual C# 2005软件的帮助信息,2005 4李兰友 杨晓光.Visual C#.NET程序设计.北京:清华大学 北方交通大学出版社,2004 5王昊亮,李刚
26、等.Visual C#程序设计教程.北京:清华大学出版社,2003 6佟伟光.Visual Basic.NET实用教程.北京:电子工业出版社,2003 7 美 Mickey Williams.冉晓景 罗邓 郭炎译.MICROSOFT Visual C# CORE REFERRNCE Visual C#技术内幕.北京:清华大学出版社 2003 8 施燕妹 陈培 陈发吉.C#语言程序设计教程.北京:中国水利水电出版社.2004 9 明月创作室.Visual C#编程精彩百例.北京:人民邮电出版社.2001 10 美 Herbert Schildt著,长春亿特译.C#编程序起步.北京:人民邮电出版社
27、.2002 11 美微软公司著,熊盛新 许志庆 李钦译. Visual C#.NET语言参考手册.北京:清华大学出版社.2002 12 孙永强等. Visual C#.NET入门与提高.北京:清华大学出版社. 2002 13 郭胜等.C#.NET程序设计教程.北京:清华大学出版社. 2002 14 B-power工作室.C#网络程序设计. 北京: 中国铁道出版社. 2001 15美Anders Hejlsberg,Scott Wiltamuth,Peter Golde著, 张晓坤 谭立平 车树良译C#编程语言详解.北京:电子工业出版社.2004 16美Simon Robinson/ Chris
28、tian Nagel著, 李敏波译.C#高级编程(第3版) .北京:清华大学出版社.2005 17美 John Sharp Jon Jagger. Microsoft Visual C#.NET程序设计. 北京:北京大学出版社.2002 8 附录#include #include #include #include #define SIZE 50#define MAX 100 void Read( ); /* 读数据 */void Save( ); /* 存数据 */void Search( ); /* 查找 */void SearchByID( ); /* 按编号查找 */void Sear
29、chByEQUIP_Name( ); /* 按实验设备名称查找 */void Delete( ); /* 删除 */void Print( ); /* 显示 */void Add( ); /* 录入 */void Modify( ); /* 修改 */void order();/*排序*/void inset();/插入/*void Count( ); /* 统计 */ struct EQUIP /* 实验设备结构体 */char IDSIZE; /* 编号 */ char EQUIP_NameSIZE; /* 实验设备名称 */double Price; /* 设备价格 */char Kin
30、dSIZE; /* 实验设备种类 */char DPSIZE; /* 购买日期 */char YNSIZE; /* 是否报废 */char DRSIZE; /* 报废日期 */ EQUIPMAX,temp; int EQUIPIndex=0;int EQUIPSum=0;int EQUIPFlagMAX; void Add( ) /* 录入数据 */printf( 请输入编号 :);scanf(%s,temp.ID);printf( 请输入实验设备名称 :);scanf(%s,temp.EQUIP_Name);printf( 请输入 实验设备的设备价格 :);scanf(%lf,&temp.P
31、rice);printf( 请输入实验设备种类 :);scanf(%s,temp.Kind); printf( 请输入购买日期 :);scanf(%s,temp.DP); printf( 请输入是否报废 :);scanf(%s,temp.YN); printf( 请输入报废日期 :);scanf(%s,temp.DR); EQUIPEQUIPIndex=temp;EQUIPFlagEQUIPIndex=1;EQUIPSum+; EQUIPIndex+;printf( 录入成功 !n);getch(); void Read( ) /* 读取数据 */FILE *pfile= NULL; char
32、 bufSIZE; if(pfile = fopen(EQUIP.txt, r) = NULL) printf( 读取信息失败 !n); return; while(fgets(buf, SIZE, pfile)fscanf(pfile,%s,EQUIPEQUIPIndex.ID);fscanf(pfile,%s,EQUIPEQUIPIndex.EQUIP_Name);fscanf(pfile,%lfn,&EQUIPEQUIPIndex.Price);fscanf(pfile,%s,EQUIPEQUIPIndex.Kind); fscanf(pfile,%s,EQUIPEQUIPIndex.D
33、P); fscanf(pfile,%s,EQUIPEQUIPIndex.YN); fscanf(pfile,%s,EQUIPEQUIPIndex.DR); EQUIPFlagEQUIPIndex=1;EQUIPSum+;EQUIPIndex+; EQUIPSum-;EQUIPIndex-;fclose(pfile);return; void inset()/插入int i,n,x,y=1;printf(请输入要插入的位置:);scanf(%d,&x);for(i=0;i=i;n-)EQUIPn+1=EQUIPn;printf(t请输入设备的编号:); scanf(%s,EQUIPx-1.ID)
34、; printf(t请输入设备的名称:); scanf(%s,EQUIPx-1.EQUIP_Name); printf(t请输入设备的分类:); scanf(%s,EQUIPx-1.Kind); printf(t请输入购买日期:); scanf(%s,EQUIPx-1.DP); printf(t请输入是否报废:); scanf(%s,EQUIPx-1.YN); printf(t请输入报废时间:); scanf(%s,EQUIPx-1.DR); printf(t请输入该设备的价格:); fflush(stdin); scanf(%f,&EQUIPx-1.Price); EQUIPIndex+;printf(n是否继续插入(1继续;0退出插入):);fflush(stdin);scanf(%d,&y);if(y!=1)y=0;break;Save();void Save( ) /* 保存数据 */int i=0;FILE *pfile= NULL; if(pfile = fopen(EQUIP.txt, w+) = NULL) pri