




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C+课程设计报告课 题: 物资管理系统 专业班级: 学 号: 姓 名: 指导教师: 评阅意见:评定成绩: 指导老师签名: 年 月 日目 录目录1 课程设计的目的和意义21.1 课程设计的目的21.2 课程设计的意义22 需求分析32.1 系统功能32.2 操作要求33 系统设计43.1 总体设计43.2 详细设计54 系统实现74.1 模块分区75 系统调试126小结15参考文献16附录 源程序171 课程设计的目的和意义1.1 课程设计的目的(1)掌握链表和文件的用法;(2)掌握C+的类的实现与函数的调用;(3)理解类之间的关系以及指针的运用;(4)利用所学的C+知识,进行简单的程序设计;课
2、程设计是一项能够锻炼我们动手能力、综合性比较强的程序设计,它与我们平时的作业相比更加能测试我们对所学知识的掌握。在设计的过程中,调试程序的过程却是最为艰难的,所以我们必须认真的找出每一个小错误。这样也为我们以后编写大型一点的程序打下基础,熟知如何能在短时间内,达到目的。课程设计是我们的主要教学实践环节。通过课程设计,我们围绕基础课或者专业课,运用学的知识,结合实际应用设计而进行的一次综合分析设计能力的训练。1.2 课程设计的意义课程设计的宗旨在于培养我们在课程范围内,初步掌握解决实际应用问题时所应具备的查阅资料、综合运用所学知识的能力,为今后从事专业工作打下基础。课程设计能让我们真实的感受每一
3、个编写程序的步骤,而编写程序的过程更是能让我们更深的理解所学知识。在让我们理解的情况下,也培养了我们的动手能力。这使得我们在编写程序这一块上更加的成熟。它是具有实际意义的操作,能使我们在现阶段上的大幅度的提升。2 需求分析2.1 系统功能物资管理系统的设计主要是要它实现以下的几个功能:(1) 信息输入功能:建立文件,根据物资产品的属性,在文件中输入产品的具体信息。如:产品编号、名称等等。(2) 产品查询功能:产品的查询分为几种,其中包括使用产品的名称、产品的入库日期,以及产品的相关规模来查询产品的当前动态。通过查询用户可以了解所询问物资的相关问题。(3) 新物入库功能:当用户只需要在当前的记录
4、中插入一条信息就可以选择此项功能。将物资的具体属性输入后保存,该条信息也将记录到当前文件。(4) 领料信息:查找需要领料的信息,看是否符合领料要求。如果可以在领完材料后,对领取的材料的信息进行修改,并打印除领料凭条。(5) 保存信息:对当前信息进行保存。(6) 打印信息:可以将保存进入文件的信息一一的打印出来。使用户了解整个物资库的内容。(7) 退出:结束整个程序。2.2 操作要求进入该程序的运行界面后,在程序的运行画面上会出现一个主菜单。此时用户可根据主目录上的提示进行相关的操作:1、信息的输入;2、信息查找;3、新物入库;4、领料模块;5、保存信息;6、打印;7、退出。主菜单上的都是大的模
5、块,具体的实现每一个功能,在这个过程中也会弹出一些与主菜单类似的子菜单。如:查找模块、领料模块。具体的实际操作,用户可通过提示一步步实现程序。3 系统设计3.1 总体设计开始显示菜单输入选项ss=2s=3s=6s=7输入信息新物入库领料模块结束s=1是是是否否否否是否是是显示查找菜单否规模查找输入选项cncn=1cn=2名称查找日期查找是是是否否cn=3保存记录打印s=4s=5查询记录领料、数据更新否否图1为物资管理系统程序运行流程图它的总体设计过程是利用文件与链表分别来实现物资管理系统信息输入、信息查找、新物入库、领料、保存以及打印的功能。3.2 详细设计(1)结构体struct gdcha
6、r no10;char name16;char inyear10;char inmonth10;char inday10;char outdate16;int scale;通过指针指向结构体对象,使每个指针的内容用链表串联起来。(2)class good private: public:在类good中含有私有成员与公有成员,通过对类中的公有函数成员的调用,可以实现管理系统中每个功能。(3)构造函数good:good(),析构函数good:good()构造函数和析构函数的应用是为了对象的初始化以及对程序实现的过程中对空间的释放。(4)主函数void main()建立头指针,并为其分配空间。(5)
7、处理菜单函数void good:handle_menu(good *head)在此函数中通过switch()函数分别调用其它功能子函数,是系统功能得到实现。(6)保存记录函数void good:save(good *head)建立一个txt格式的记事本,将输入的信息进行保存。此功能主要时运用文件的相关知识。(7)输入信息函数good *good:input(good *head)打开文件,进行信息的输入。通过链表将输入信息的每个结点连接起来。在信息输入结束时不可忘记将记录进行保存。(8)查找函数void good:search(good *head)在查找信息函数中包含了三个子函数,分别是通过
8、不同的信息对产品进行查询,它们分别是: void good:search1(good *head)void good:search2(good *head)void good:search3(good *head)(9)插入信息功能good *good:insert(good *head)如果文件为空,就将要输入的文件直接设为头文件,把它的下一个接点设为NULL,如果文件中存在已经保存好的数据,就直接将它加入到结点的最后.(10)领料函数good *good:lingliao(good *head)通过对需要领取的物资进行查找,输入需要领取的物资的数目,以及物资领取的时间,然后对库存物资进行数
9、据的修改,能够快速的更新数据。(11)打印函数void good:display(good *head)通过链表的作用将保存的信息一一的显示出来,可以方便用户们对整个库存资料的熟悉。(12)运算符重载函数istream &operator>>(istream &is,good &ob)ostream &operator<<(ostream &os,good &ob)通过重载运算符>>和<<进行文件的打开与关闭工作。(13)退出函数exit(0);4 系统实现4.1 模块分区(1)结构体struct
10、gd char no10; /编号char name16; /产品名称char inyear10; /进货年份char inmonth10; /进货月份char inday10; /进货日期char outdate16; /出货日期int scale; /产品规模(数量);用指针指向结构体对象,将指针的分配空间的结点连接起来创建链表。在结构体对象中分别包含有编号、产品名称、进货日期、以及出货日期还有产品规模等相关信息。(2)输入信息函数do +head->count; /break在count+之下cout<<"ntt编号:"cin>>star
11、->g.no;if(strcmp(star->g.no,"0")=0) break; /结束循环;出口cout<<"tt产品名称:"cin>>star->; /输入产品名称cout<<"tt进货年份:"cin>>star->g.inyear; /输入进货年份cout<<"tt进货月份:" cin>>star->g.inmonth; /输入进货月份 cout<<"tt进货日期:&qu
12、ot; cin>>star->g.inday; /输入进货日期 cout<<"tt规模(数量):" cin>>star->g.scale; /输入进货规模if(head->count=0)head=star; info->next=star; /star指向info的下一个地址info=star; star=new good; /分配新空间 while(1);info->next=NULL;return(head);文件打开后,输入相关产品信息,当输入的编号为0时,循环结束。(3)查找函数查找信息的功能实现有
13、三种不同的形式,分别是通过产品名称、产品名称以及进货日期还有产品名称和产品规模。下面以产品名称的查找作为示例:void good:search1(good *head) ifstream in;in.open("wuzi.txt",ios:in|ios:nocreate); /打开文件if(!in)cout<<"t文件不存在!"<<endl;char input16;good *p; cout<<"请输入产品名称:"<<endl;gets(input); /输入产品名称p=head;wh
14、ile(p!=NULL) /循环查找if(strcmp(input,p->)=0) cout<<"n*FOUND*n"<<endl; show(p); /显示查找记录 cout<<"n*END*n"<<endl;break; /退出循环else p=p->next; /指针指向下一个结点 if(p=NULL) cout<<"not find!n"<<endl; /显示没有找到 return;(4)插入信息函数good *good:inser
15、t(good *head)good *info,*star;star=new good;info=head;将要插入的信息输入,如果头指针为NULL,就将新加的信息防到整个链表的最后,作为最后一个结点。(5)领料模块while(star!=NULL) /头文件不为空,循环if(cn=1&&strcmp(input,star->)=0)|(cn=2&&strcmp(input,star->g.no)=0) /判断条件cout<<"请输入需要领取物资的数目:n"<<endl; cin>>
16、t; /输入数目 if(t<=star->g.scale) int s; s=star->g.scale-t; /数据的处理 star->g.scale=s; /数据的更改赋值 cout<<"请输入领料的日期:"<<endl; cin>>star->g.outdate; /输入出货的日期 else cout<<"没有足够的物资"<<endl;if(count=0) head=new good; /分配新空间定为头指针 cout<<"记录为空。&
17、quot;<<endl; return head;return head;elseold=star; /指针star赋值给oldstar=star->next; /指针star往下移cout<<"没有找到相应的记录。"<<endl;return head; /返回头指针上面的函数是查找到需要领取的物资并登陆领料的资料(领取物资数目以及领料的日期)的运行函数。在领料后,通过程序的作用会更新系统的数据。(6)打印函数void good:display(good *head)if(head->count=0) /头文件为空cout&
18、lt;<"nt现在没有纪录!"<<endl;return;good *p;p=head; /把头指针赋给指针pcout<<"nt现共有如下"<<count<<"条数据:n"cout<<"编号"cout<<"t名称"<<" "<<"进货年份"<<" "<<"进货月份"<<"
19、 "<<"进货日期"<<" "<<"规模n" /数据打印出来的格式for(int i=0;i<head->count;i+) cout<<p->g.no<<'t'<<p-><<'t'<<p->g.inyear<<'t'<<" "<<p->g.inmonth<<'
20、t'<<p->g.inday<<'t'<<p->g.scale<<'n'<<endl; p=p->next;cout<<'n'return;打印函数是能够将储存的资料一次的打印出来,方便浏览。(7)退出函数exit(0);5 系统调试图2 程序主菜单图2界面为物资管理系统的主目录部分:该部分显示的是用户选择操作的部分,用户可以在主目录看到有7个不同的选项。根据用户本身的需要,可在键盘上按下选项。图3 信息输入图3是信息的输入,在此界面中用户输入了木材
21、和水龙头两个产品的信息。我们可以看到这两个产品的属性,如进货日期、规模等等。图4 信息存入文件图4是信息保存,它可以将用户输入进去的信息存入文件。同时也就可以在以后的查找或是打印信息的时候从文件中取出可用信息。此时在界面中显示有两条信息存入文件。图5 信息查找图5是信息的查找,在界面中的查找菜单是一个子菜单。此界面是选择的用产品的名称来查找。图6 领料模块图6是领料模块,用户通过登陆领料信息以及需要领取的物资的数目可以领取到相关的物资。领取后,系统会进行更新,详见图7、图8。图7 打印信息(领料前)图8 打印信息(领料后)图7、图8是信息打印,它是整个库存信息打印出来的形式,也是将保存在文件中
22、的信息取出来通过链表的作用一一的显示出来,方便浏览以及从整体上了解库存的信息。6小结在课程设计过程中,我学到了学习的方法,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪,两周的课程设计过去了,我们总算也获得了好的收获。在本次实践中,给我印象最为深刻的是在领料模块程序的编译过程中,起初是没有一点头绪,后来想通了也就是一个修改函数。经过我一再的对文件进行调试。终于在两周的后,我的程序也基本上完工了。同时也谢谢给我指点迷津的老师。两周的课程设计,使我对C+有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也
23、发现我的好多不足之处,首先对C+的文件的知识掌握得不是很熟练,还有对函数调用的正确使用也不够熟悉,在此之中,因为管理系统的建立需要依靠链表的知识,而我们并没有学习很多这个相关方面的知识,所以在编写程序的过程中,这无疑成为了最难解决的问题,还好在参考资料书和网站上查找的资料以及老师的帮助后,将这个问题解决掉,自己机也多学习了一个知识点,在程序的调试过程中我很难找出错的原因。在调试的过程中,总是会出现错误,不能将他们全部处理掉。总之,两个星期的实践学习给我留下了很深刻的印象。在以后的学习过程中我还得花很多的时间来深入的研究这一门课程,因为是专业课,所以我们也不能只停留在这种简单的程序制作上,当然课
24、程设计也给我们提供了提前实验的机会,我们在这两周是进步很大的,所以再次感谢在这两周中指导我们的刘老师。参考文献1 陈维兴、林小茶 C+面向对象程序设计教程(第二版)。北京:清华大学出版社,20042 刘振安、刘燕君、孙忱 C+语言课程设计。北京:机械工业出版社,20073 网站:32 / 33文档可自由编辑打印附录 源程序#include<fstream.h> /头文件 #include<stdlib.h>#include<stdio.h>#include<string.h>#include<iostream.h>struct gd
25、/结构体char no10; /编号char name16; /产品名称char inyear10; /进货年份char inmonth10; /进货月份char inday10; /进货日期char outdate16; /出货日期int scale; /产品规模(数量);class good /good类private: /私有成员gd g; /结构体对象ggood *next; /指针 int menu_select(void); public:static int count; /静态成员good(); /构造函数good(); /析构函数void handle_menu(good *
26、); /处理函数菜单声明good *input(good *); /信息输入函数声明good *load(good *); /函数链接void search(good *); /查询函数菜单声明void search1(good *); /名称查询函数声明void search2(good *); /日期查询函数声明void search3(good *); /规模查询函数声明good *insert(good *); /新物入库函数声明good *lingliao(good *); /领料模块函数声明void save(good *); /保存函数声明void display(good *)
27、; /打印函数声明void show(good *); friend ostream &operator<<(ostream &os,good &ob); /运算符重载friend istream &operator>>(istream &is,good &ob);int good:count=0; /静态变量count初始化good:good() /成员初始化next=NULL;g.no0=' '0='0'g.inyear0=' 'g.inmonth0='
28、; 'g.inday0=' 'g.outdate0=' 'g.scale=0;good:good() /析构函数if(next!=NULL)delete next;void main() /主函数good *head; /头指针 head=new good; /分配空间head->handle_menu(head);void good:handle_menu(good *head)for( ; ; )switch(menu_select() case 1:head=input(head);break; /进入信息输入函数case 2:search(
29、head);break; /进入查找信息函数 case 3:insert(head);break; /进入插入函数case 4:lingliao(head);break; /进入领料模块case 5:save(head);break; /进入保存信息函数 case 6:display(head);break; /进入打印函数case 7:exit(0);break; /退出int good:menu_select()char s2;int cn; cout<<"*欢迎进入物资管理系统!*n"<<"t1.信息输入。n"<<
30、;"t2.信息查找。n"<<"t3.新物入库。n"<<"t4.领料。n"<<"t5.保存信息。n"<<"t6.打印。n" <<"t7.退出。n"<<"*end*"<<endl; docout<<"请选择."<<endl;gets(s); /输入选项cn=atoi(s);while(cn<0|cn>7);return(c
31、n);void good:save(good *head) /保存文件if(head->0='0')cout<<"t没有纪录可存!"<<endl;return;ofstream out;out.open("wuzi.txt",ios:out); /打开文件if(!out)cout<<"t不能打开文件!"<<endl;exit(1); /退出cout<<"nt存文件"<<endl;out<<head-
32、>count<<'n'good *p=head;while(p!=NULL)out<<*p;p=p->next;out.close(); /文件关闭cout<<head->count<<"t条纪录已经存入文件,请继续操作。"<<endl;good *good:input(good *head) /信息输入ifstream in;in.open("wuzi.txt",ios:in|ios:nocreate); /打开文件if(!in) cout<<&q
33、uot;t还没建立文件,退出时请保存文件。"<<endl; elsein.close(); /关闭文件if(head->count=0) head=load(head); /链接:取文件good *info,*star; /定义指针star=new good;info=head;while(info->next!=NULL) /循环info=info->next; /指针指向下一个值 cout<<"t输入数据,编号输入0时结束。"<<endl;-head->count; /count是因为下面的操作要是c
34、ount多加一do +head->count; /break在count+之下cout<<"ntt编号:"cin>>star->g.no;if(strcmp(star->g.no,"0")=0) break; /结束循环;出口cout<<"tt产品名称:"cin>>star->; /输入产品名称cout<<"tt进货年份:"cin>>star->g.inyear; /输入进货年份cout<<
35、"tt进货月份:" cin>>star->g.inmonth; /输入进货月份 cout<<"tt进货日期:" cin>>star->g.inday; /输入进货日期 cout<<"tt规模(数量):" cin>>star->g.scale; /输入进货规模if(head->count=0)head=star; info->next=star; /info的下一个地址指向starinfo=star; star=new good; /分配新空间 w
36、hile(1);info->next=NULL;return(head);good *good:load(good *head) /取文件操作void search(good *head); return(head); /返回头指针istream &operator>>(istream &is,good &ob) /重载运算符>>is.getline(ob.g.no,10,'n');is.getline(,16,'n');is>>ob.g.no;is>>ob.g.na
37、me;is>>ob.g.inyear;is>>ob.g.inmonth;is>>ob.g.inday;is>>ob.g.scale;return is; /返回值ostream &operator<<(ostream &os,good &ob) /重载运算符<<os<<ob.g.no<<'n'os<<<<'n'os<<ob.g.inyear<<'n'os<&
38、lt;ob.g.inmonth<<'n'os<<ob.g.inday<<'n'os<<ob.g.scale<<'n'return os; /返回值 void good:search(good *head) /查找菜单函数char choose2;int cn;cout<<"*查找菜单*n"<<"t1.按产品名称查找。n"<<"t2.按产品进货日期查找并统计。n"<<"t3
39、.按产品名称、规模查找并统计。n"<<"t4.退出。n"<<"*end*"<<endl;docout<<"请选择."<<endl;gets(choose);cn=atoi(choose);while(cn<0|cn>4);switch(cn)case 1:search1(head);break; /进入名称查找函数case 2:search2(head);break; /进入日期查找函数case 3:search3(head);break; /进入规模查
40、找函数case 4:exit(0); /退出void good:search1(good *head) ifstream in;in.open("wuzi.txt",ios:in|ios:nocreate); /打开文件if(!in)cout<<"t文件不存在!"<<endl;char input16;good *p; cout<<"请输入产品名称:"<<endl;gets(input); /输入产品名称p=head;while(p!=NULL) /循环查找if(strcmp(input
41、,p->)=0) cout<<"n*FOUND*n"<<endl; show(p); /显示查找记录 cout<<"n*END*n"<<endl;break; /退出循环else p=p->next; /指针指向下一个结点 if(p=NULL) cout<<"not find!n"<<endl; /显示没有找到 return;void good:search2(good *head)ifstream in;in.open("wuz
42、i.txt",ios:in|ios:nocreate); /打开文件if(!in)cout<<"t文件不存在!"<<endl;char input016; char input116;char input216;good *p;cout<<"请输入产品名称:"<<endl;gets(input0); /输入产品名称cout<<"请输入产品进货年份:"<<endl;gets(input1); /输入进货年份cout<<"请输入产品进货
43、月份:"<<endl;gets(input2); /输入进货月份p=head;while(p!=NULL)if(strcmp(input0,p->)=0&&strcmp(input1,p->g.inyear)=0&&strcmp(input2,p->g.inmonth)=0) cout<<"n*FOUND*n"<<endl; show(p); /显示查找记录 cout<<"n*END*n"<<endl; break; /退出
44、循环else p=p->next; /指针指向下一个结点if(p=NULL) printf("not findn"); /显示没有找到return;void good:search3(good *head)ifstream in;in.open("wuzi.txt",ios:in|ios:nocreate); /打开文件if(!in)cout<<"t文件不存在!"<<endl;char input016;int input1;good *p;cout<<"请输入产品名称:"
45、<<endl;gets(input0); /输入产品名称cout<<"请输入产品规模:"<<endl;cin>>input1; /输入产品规模p=head;while(p!=NULL)if(strcmp(input0,p->)=0&&input1=p->g.scale) cout<<"n*FOUND*n"<<endl;show(p); /显示查找记录cout<<"n*END*n"<<endl;brea
46、k; /退出循环else p=p->next; /指针指向下一个结点if(p=NULL) printf("not findn"); /显示没有找到return;void good:display(good *head)if(head->count=0) /头文件为空 cout<<"nt现在没有纪录!"<<endl;return;good *p;p=head; /把头指针赋给指针pcout<<"nt现共有如下"<<count<<"条数据:n"co
47、ut<<"编号"cout<<"t名称"<<" "<<"进货年份"<<" "<<"进货月份"<<" "<<"进货日期"<<" "<<"规模n" /数据打印出来的格式for(int i=0;i<head->count;i+)cout<<p->g.no&l
48、t;<'t'<<p-><<'t'<<p->g.inyear<<'t'<<p->g.inmonth<<'t'<<p->g.inday<<'t'<<p->g.scale<<'n'<<endl; p=p->next;return;good *good:insert(good *head)ifstream in;in.ope
49、n("wuzi.txt",ios:in|ios:nocreate); /打开文件if(!in) cout<<"t还没建立文件,退出时请保存文件。"<<endl; elsein.close(); /关闭文件if(head->count=0)head=load(head); /链接:取文件good *info,*star; /定义指针star=new good;info=head;while(info->next!=NULL) /循环info=info->next; +head->count; cout<
50、<"ntt编号:" cin>>star->g.no;cout<<"tt姓名:" cin>>star->; /输入产品名称cout<<"tt进货年份:" cin>>star->g.inyear; /输入进货年份 cout<<"tt进货月份:" cin>>star->g.inmonth; /输入进货月份 cout<<"tt进货日期:" cin>>sta
51、r->g.inday; /输入进货日期 cout<<"tt规模(数量):" cin>>star->g.scale; /输入进货规模if(head->count=0)head=star;info->next=star; /info的下一个地址指向starinfo=star;star=new good; /分配新空间 info->next=NULL; return(head);good *good:lingliao(good *head) char input30;int t;int cn=0;cout<<"ntt1.通过姓名&q
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 针对于小样本数据的换热器污垢预测方法进行研究
- 2024年碳排放监测设备安装调试合规考核试卷
- 购买热镀锌合同(标准版)
- 简易道路施工合同(标准版)
- 2024年贵州电网招聘真题
- 厦门市湖里区产业投资集团有限公司人员招聘考试真题2024
- 城南旧事感想200个字
- 2025年电大房地产开发与管理专业《房地产估价》真题汇编及答案解析
- 考点解析-人教版八年级物理上册第5章透镜及其应用-透镜专项攻克练习题(含答案详解)
- 考点攻克人教版八年级物理上册第5章透镜及其应用-透镜专项训练试卷(含答案详解版)
- 国开电大 可编程控制器应用实训 形考任务1-7全
- 《新媒体概论(第三版)》课件第5章
- 女装省道转移方法课件
- 教学第六章-海洋资源与海洋经济课件
- 三国全面战争秘籍大全
- DBJ50-112-2016 现浇混凝土桥梁梁柱式模板支撑架安全技术规范
- 城市轨道交通运营管理毕业论文题目
- 武汉近现代重要史迹和代表性建筑
- 2021智慧树答案运动安全与健康-研究生校内课 知到网课章节测试答案
- 监理业务手册 (范本)【精选文档】
- 第5章-电感式传感器
评论
0/150
提交评论