《C语言课程设计报告》.docx

上传人:b****6 文档编号:12590870 上传时间:2023-06-06 格式:DOCX 页数:25 大小:204.29KB
下载 相关 举报
《C语言课程设计报告》.docx_第1页
第1页 / 共25页
《C语言课程设计报告》.docx_第2页
第2页 / 共25页
《C语言课程设计报告》.docx_第3页
第3页 / 共25页
《C语言课程设计报告》.docx_第4页
第4页 / 共25页
《C语言课程设计报告》.docx_第5页
第5页 / 共25页
《C语言课程设计报告》.docx_第6页
第6页 / 共25页
《C语言课程设计报告》.docx_第7页
第7页 / 共25页
《C语言课程设计报告》.docx_第8页
第8页 / 共25页
《C语言课程设计报告》.docx_第9页
第9页 / 共25页
《C语言课程设计报告》.docx_第10页
第10页 / 共25页
《C语言课程设计报告》.docx_第11页
第11页 / 共25页
《C语言课程设计报告》.docx_第12页
第12页 / 共25页
《C语言课程设计报告》.docx_第13页
第13页 / 共25页
《C语言课程设计报告》.docx_第14页
第14页 / 共25页
《C语言课程设计报告》.docx_第15页
第15页 / 共25页
《C语言课程设计报告》.docx_第16页
第16页 / 共25页
《C语言课程设计报告》.docx_第17页
第17页 / 共25页
《C语言课程设计报告》.docx_第18页
第18页 / 共25页
《C语言课程设计报告》.docx_第19页
第19页 / 共25页
《C语言课程设计报告》.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

《C语言课程设计报告》.docx

《《C语言课程设计报告》.docx》由会员分享,可在线阅读,更多相关《《C语言课程设计报告》.docx(25页珍藏版)》请在冰点文库上搜索。

《C语言课程设计报告》.docx

《C语言课程设计报告》

 

YangtzeUniversityCollegeofArtsandScience

学生实习手册

(课程设计报告)

学部:

理工学部

专业:

电子信息工程

班级:

电信5111

姓名:

xx

学号:

xxxxxxx

课程名称:

C语言程序设计课设

指导教师:

杜红、呙明辉

实习时间:

2012年7月6日至2012年7月15日

 

一、题目

实验设备管理系统设计

二、设计目的

设备信息包括:

设备编号、设备种类(如:

微机打印机扫描仪等等)、设备名字、设备价格、设备购入日期、是否报废、报废日期、维修费、处理方式。

本课将要设计的程序需要实现以下功能:

(1)录入设备信息

(2)对设备信息进行查询(以不同的方式查询)

(3)对设备信息的修改(只修该需要修改的项)

(4)对设备进行分类统计

(5)对设备以编号的大小进行排序

(6)删除设备信息

三、总体设计

程序设计组成框图、流程图

1.程序的主题部分。

 

2.修改功能的框图结构。

 

3.删除功能的框图结构。

 

 

四、详细设计

主函数被定义了结构体,方便以后函数调用。

结构体定义了两个,前者

structEquipment

{

charnumber[20];//设备编号//

chartype[20];//设备种类//

charname[20];//设备名称//

intprice;//设备价格//

chardate[20];//购入日期//

charstate[10];//是否报废//

charworrydate[10];//报废日期//

intrepair;//破损耗费//

chardispose[10];//处理方法//

};中的设备种类为不同设备的数目,后者

structStr

{

chartype[10];//设备的类型//

intnum;//类型的数量//

};某种设备的数目。

二者不同,因此要分开定义。

在主函数下有有六个模块,分别为:

录入模块、查询模块、修改模块、分类模块、排序模块、删除模块。

此外,还有一些单独定义的函数,如查找、读取、存储等。

1.录入模块:

录入模块中,先通过prinf来显示示例和提示,再通过scanf来输入相关数据。

并在结尾用了save,此函数保证了数据的存入(此存入非存入到内存中,而是通过建立文件的方式存储,保证了关闭程序后录入的数据仍然存在)。

数据会被存在一开始定义的数组之中。

而save(ep,2)中的2表明数据录入后不会覆盖原来的数据。

2.查询模块:

查询模块中,有四种查询方式。

这就运用了switch进行选择查询。

当然,之前会调用存有数据的数组equipment,这使用到了get。

在以编号查询的选项中,使用了查找函数,即find。

在以种类、名称查询的选项中,使用到了if和strcmp,用来比较字符串是否一致。

全部查询时,亦运用了if、strcmp,及“!

”、“&&”,是所有数据全部显示。

为了可以重复查找,用到了reset2(程序中定义的一种重置,作用是将以前的输入清除,方便再次操作,后不赘述)。

3.修改模块:

运用find查找要修改的数据。

switch用来选择修改的部分。

这一模块的头部定义了revise(修改)函数,此函数功能类似程序中的查找功能(即find)。

修改后的数据将直接覆盖原来对应的数据。

修改成功。

4.分类模块:

此模块定义了assort,通过对不同设备种类的对比,甄别出相同的种类,如果相同,则程序中的temp会自加1,这样便统计出了这个种类设备的数量。

这其中还运用了strcpy,作用是,如果某种设备只有一个,那么就相当于只选取了所有设备种类中的这个种类(这个种类代表的数字当然是1了),统计结果就是这种设备只有一个。

5.排序模块:

排序功能是以设备编号的大小排序来实现的。

选取数据的编号,通过比大小的方式来排列,即“冒泡”排序。

然后再让整体数据根据排序后的编号进行排列。

6.删除模块:

输入编号,通过find查找到该组数据。

然后用reset2将此组数据清零。

最后还要将此组已经清零的数据放到整个数组尾部,这样,该组数据就已经在形式上被删除了。

五、运行结果及分析

1.运行程序,显示主菜单。

2.输入功能编号1,进行对数据的录入。

3.输入功能编号2,进入查询功能。

程序设定有四种查询方式,输入1、2、3、4中任意数字进入相应的查询方式。

4.输入数字编号3,进入设备信息的修改功能。

输入要修改的设备的编号,按数字键提示进行相应项的修改。

修改完成后,输入数字键0,退出修改功能。

5.输入数字编号4,显示当前设备的分类情况。

6.输入数字编号5,进入排序功能。

各设备的编号将按照从小到大的顺序排列,设备信息也将一并显示出来。

7.输入数字编号6,进入删除功能。

输入想要删除的设备的编号,即可删除该设备的信息。

8.输入数字编号7后,按任意键即可退出程序。

六、调试与测试

程序是由一个小组具体分工后合作完成的,因此在将各个功能合并到一起的时候,经常会出现很多错误。

因此要进行一系列的查错和排错工作,即调试。

这就需要用到断点功能及“//”“/**/”符号。

其中断点可以用来在某一个特定位置终止程序。

“//”可以让该行禁用,而“/**/”可以让在其中的程序禁用。

在程序片段组合时,如果之前程序运行的很好,加入一部分后便出错,就必须通过一些调试的手段检查出错在哪里,然后通过不断更改来消除错误,最终达到准确无误。

程序完全做好后,虽然在编译的时候可能不会出现bug,但在运行时有可能会遇到错误,或者可以运行,但有些功能却存在缺陷。

测试程序,便可以寻找到相应的缺陷和错误,便于及时修改,使程序达到预期目标。

七、课程设计心得及体会

本次课程设计,让我得到了很大的提高。

尤其是在上机编程方面,以往上机的时间不长,而且很多时间都是参照书中的例子写一段很短的程序,而此次的课设,编制的是一个比较大的程序,我们小组本次的程序有三百多行,而以前我们连一个一百行的程序都没编制过,这对我们形成了很大的挑战。

本次的编程中,通过上网、看书查资料,我们接触到了很多很生疏,甚至从来都没有接触

过知识,使得我们学到了很多,而且同学之间的合作,增强了我们之间的默契,有利于培养合作的精神,也有利于我们将来的学习和工作。

在编制程序方面,我觉得,程序是不能一蹴而就的。

至少一蹴而就的程序不会尽善尽美。

程序编写要一步一步的完成。

首先,对于要编的程序要有一个总体思路。

要明确想要什么。

只要把思路理清楚了,程序就好编写了。

把程序分割成几个块,即多个函数,一块一块的编写。

然后将分散的函数用另外的函数连接起来或者用main函数连接。

到这一步,程序也就初步编成了,之后便是调试,检查错误。

最后我觉得还可以对于已经编写好的程序进行一些修改添加,使它更加人性化。

优化程序的阶段是很重要的。

最后,编程是要一步一步地去完成的,在追求自己梦想的时候也是一样,只有先踏出基础的一步,才能迈向更高远的一步,才能在在追逐梦想的道路上走的更远!

八、源程序清单和执行结果:

#include

#include

#include

#defineN100//定义最多存100组//

#defineM10

structEquipment

{

charnumber[20];//设备编号

chartype[20];//设备种类

charname[20];//设备名称

intprice;//设备价格

chardate[10];//购入日期

charstate[10];//是否报废

charworrydate[10];//报废日期

intrepair;//破损耗费

chardispose[10];//处理方法

};

structStr

{

chartype[10];//定义结构体//

intnum;

};

//查找

intfind(structEquipment*ep,char*num)

{

inti;

for(i=0;i

{

if(strcmp(num,ep[i].number)==0)//在查询,删除,修改中都要用到,单独定义,调用//

{

returni;//根据编号寻找用户需要的数据//

}

}

printf("输入的编号不存在!

\n");

return-1;

}

//录入模块

voidwrite(structEquipment*ep)

{

voidsave(structEquipment*ep,int);

inti,a;

voidreset2(structEquipment*ep);//将录入模块重置,防止出错//

reset2(ep);

printf("请输入要输入的设备的个数:

");

scanf("%d",&a);

printf("\n请输入每个设备的编号,种类,名字,价格,购入日期,是否报废,报废日期,维修费,处理方式:

\n");

printf("示例:

1000微机联想A950002004/9/8是2012/9/7650闲置\n");

printf("提示:

请以空格键作为间隔符!

\n\n");

for(i=0;i

{

scanf("%s%s%s%d%s%s%s%d%s",ep[i].number,ep[i].type,ep[i].name,&ep[i].price\

ep[i].date,ep[i].state,ep[i].worrydate,&ep[i].repair,ep[i].dispose);

}

save(ep,2);//保存操作数据//

}

//查询模块

voidshow(structEquipment*ep)

{

inti,a,t,k=0;

chartemp[10];

voidget(structEquipment*ep);

voidreset2(structEquipment*ep);//重置此模块//

reset2(ep);

get(ep);//查询前先从文件中读取数据//

printf("1.按编号查询2.按名称查询3.按种类查询4.全部查询\n");

printf("请输入功能编号:

");//选择查询类型//

scanf("%d",&a);

printf("\n");

switch(a)

{

case1:

{

printf("请输入设备的编号:

");

scanf("%s",temp);

t=find(ep,temp);//用find查找用户所要操作的数据//

printf("编号:

%s\n种类:

%s\n名称:

%s\n价格:

%d\n购入日期:

%s\n是否报废:

%s\n报废日期:

%s\n维修费:

%d\n处理方式:

%s\n"\

ep[t].number,ep[t].type,ep[t].name,ep[t].price,ep[t].date,ep[t].state,ep[t].worrydate\

ep[t].repair,ep[t].dispose);

}

break;

case2:

{

printf("请输入设备的名称:

");

scanf("%s",temp);

for(i=0;strcmp(ep[i].name,"\0")!

=0&&i

{

if(strcmp(ep[i].name,temp)==0)

{

k=1;

printf("编号:

%s\n种类:

%s\n名称:

%s\n价格:

%d\n购入日期:

%s\n是否报废:

%s\n报废日期:

%s\n维修费:

%d\n处理方式:

%s\n"\

ep[i].number,ep[i].type,ep[i].name,ep[i].price,ep[i].date,ep[i].state,ep[i].worrydate\

ep[i].repair,ep[i].dispose);

}

}

if(k==0)

printf("输入设备的名称不存在!

");

}

break;

case3:

{

printf("请输入设备的种类:

");

scanf("%s",temp);

for(i=0;strcmp(ep[i].type,"\0")!

=0&&i

{

if(strcmp(ep[i].type,temp)==0)

{

k=1;

printf("编号:

%s\n种类:

%s\n名称:

%s\n价格:

%d\n购入日期:

%s\n是否报废:

%s\n报废日期:

%s\n维修费:

%d\n处理方式:

%s\n"\

ep[i].number,ep[i].type,ep[i].name,ep[i].price,ep[i].date,ep[i].state,ep[i].worrydate\

ep[i].repair,ep[i].dispose);

}

}

if(k==0)

printf("输入设备的种类不存在!

");

}

break;

case4:

{

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

{

printf("\n编号:

%s\n种类:

%s\n名称:

%s\n价格:

%d\n购入日期:

%s\n是否报废:

%s\n报废日期:

%s\n维修费:

%d\n处理方式:

%s\n"\

ep[i].number,ep[i].type,ep[i].name,ep[i].price,ep[i].date,ep[i].state,ep[i].worrydate,ep[i].repair,ep[i].dispose);

}

}

break;

default:

printf("输入错误!

\n");

}

}

//读取

voidget(structEquipment*ep)

{

inti;

FILE*fp;

fp=fopen("equipment.dat","rb");//以只读方式打开二进制文件,只能读数据,文件必须存在//

if(fp==NULL)

{

printf("cannotopenthisfile!

\n");

exit(0);

}

for(i=0;i

{

fscanf(fp,"%s%s%s%d%s%s%s%d%s",ep[i].number,ep[i].type,ep[i].name,&ep[i].price\

ep[i].date,ep[i].state,ep[i].worrydate,&ep[i].repair,ep[i].dispose);

}

fclose(fp);

}

//存储

voidsave(structEquipment*ep,inta)

{

inti;

switch(a)

{

case1:

{

FILE*fp;

fp=fopen("equipment.dat","wb");//以只写方式打开二进制文件,文件不存在则新建一个,存在则覆盖//

if(fp==NULL)

{

printf("cannotopenthisfile!

\n");

exit(0);

}

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

{

fprintf(fp,"%s%s%s%d%s%s%s%d%s\n",ep[i].number,ep[i].type,ep[i].name\

ep[i].price,ep[i].date,ep[i].state,ep[i].worrydate,ep[i].repair,ep[i].dispose);

}

fclose(fp);

};

break;

case2:

{

FILE*fp;

fp=fopen("equipment.dat","ab");//以追加方式打开二进制文件,向已存文件的末尾添加数据(原数据不会被覆盖//)

if(fp==NULL)

{

printf("cannotopenthisfile!

\n");

exit(0);

}

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

{

fprintf(fp,"%s%s%s%d%s%s%s%d%s\n",ep[i].number,ep[i].type,ep[i].name\

ep[i].price,ep[i].date,ep[i].state,ep[i].worrydate,ep[i].repair,ep[i].dispose);

}

fclose(fp);

};

break;

}

}

//修改模块

voidrevise(structEquipment*ep,structStr*str)

{

inti,t,k;

chartemp[10];

voidreset2(structEquipment*ep);

reset2(ep);//重置此模块,清0//

get(ep);//读取数据//

printf("请输入要修改设备的编号:

");

scanf("%s",temp);

t=find(ep,temp);//用find查找用户所要操作的数据//

printf("原设备的信息:

\n");

printf("编号:

%s\n种类:

%s\n名称:

%s\n价格:

%d\n购入日期:

%s\n是否报废:

%s\n报废日期:

%s\n维修费:

%d\n处理方式:

%s\n"\

ep[t].number,ep[t].type,ep[t].name,ep[t].price,ep[t].date,ep[t].state,ep[t].worrydate,ep[t].repair,ep[t].dispose);

for(i=0;i

{

while

(1)

{

printf("\n请选择要修改内容的功能号:

\n(1-编号\n2-种类\n3-名称\n4-价格\

\n5-购入日期\n6-是否报废\n7-报废日期\n8-维修费\n9-处理方法\n0-保存并退出)\n");

scanf("%d",&k);

switch(k)

{

case1:

printf("设备新的编号为:

");

scanf("%s",ep[t].number);break;

case2:

printf("设备新的种类为:

");

scanf("%s",ep[t].type);break;

case3:

printf("设备新的名称为:

");

scanf("%s",ep[t].name);break;

case4:

printf("设备新的价格为:

");

scanf("%d",&ep[t].price);break;

case5:

printf("设备的购入日期:

");

scanf("%s",ep[t].date);break;

case6:

printf("设备是否保废:

");

scanf("%s",ep[t].state);break;

case7:

printf("设备的报废日期:

");

scanf("%s",ep[t].worrydate);break;

case8:

printf("设备的维修费为:

");

scanf("%d",&ep[t].repair);break;

case9:

printf("设备的处理方法:

");

scanf("%s",ep[t].dispose);break;

case0:

printf("EXIT!

\n");

str[i].num=0;

save(ep,1);

return;break;

//default:

printf("您已选择返回主菜单!

");break;

}

printf("修改成功!

\n");

}

}

//修改后自动保存//

}

//分类模块

voidassort(structEquipment*ep,structStr*str)

{

inti=0,j=0,temp=0;

voidreset2(structEquipment*ep);

reset2(ep);

get(ep);

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

{

temp=0;

for(j=0;(strcmp(str[j].type,"\0")!

=0)&&j

{

if(strcmp(str[j].type,ep[i].type)==0)

{

str[j].num++;

temp=1;

}

}

if(temp==0)

{

strcpy(str[j].type,ep[i].type);

str[j].num++;

}

}

for(i=0;(strcmp(str[i].type,"\0")!

=0)&&i

{

printf("%s的数目为:

%d\n",str[i].type,str[i].num);

}

save(ep,1);

}

//排序

voidorder(structEquipment*ep)

{

inti,n,j;

structEquipmentt;

voidreset2(structEquipment*ep);

reset2(ep);

get(ep);

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

n=i-1;

for(i=0;i

for(j=0;j

if(strcmp(ep[j].number,ep[j+1].number)>0)

{

t=ep[j];

ep[j]=ep[j+1];

ep[j+1]=t;

}

for(i=0;strcmp(ep[i].number,"\0")!

=0&&i

printf("%s%s%s%d%s%s%s%d%s\n",ep[i].number,ep[i].type,ep[i].name,ep[i].price,ep[i].date,ep[i].state

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2