c语言课程设计之图书管理系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
附件6
南京工程学院
课程设计说明书(论文)
题目商品库存管理系统
课程名称高级语言程序设计(C)
院(系、部、中心)通信工程
专业多媒体通信
班级媒通111
学生姓名张瑜
学号208110515
设计地点信息楼C216
指导教师袁璟
设计起止时间:2012年3月5日至2012年3月9日
目录
1.课程设计题目.................................................... 错误!未指定书签。
2.软件功能描述.................................................... 错误!未指定书签。
3.软件总体设计.................................................... 错误!未指定书签。
3.1数据结构描述与定义......................................... 错误!未指定书签。
3.2模块设计................................................... 错误!未指定书签。
4.测试结果与分析.................................................. 错误!未指定书签。
5.课程设计总结.................................................... 错误!未指定书签。
附录:源程序清单................................................... 错误!未指定书签。
1.课程设计题目
商品库存管理系统
要求:设计数据结构
实现商品的入库,出库,查询等功能,读/写文件功能
(1,整个系统均用C语言实现;
(2,可以利用数组、指针、链表来实现数据结构设计;
(3,管理系统具有输入、显示、查询、删除、排序、插入、保存、读取等基本功能;
(4,系统的各个功能模块都用函数的形式来表示;
(5,可以将信息保存在文件中;
(6,可以将信息从文件中读取出来。
2.软件功能描述
商品库存管理系统软件为人们提供了一个对商品价格信息了解,对商品的录入录出功能的使用提供了一个很好的平台。
并给人们友好的操作界面,功能需求描述如下:
1、提供系统主控平台:
人们进入系统主控平台,界面中只显示其含有的功能供人们选择。
当顾客在系统的提示下输入选项代码时,系统会调用相应的子程序供人们选择的功能。
因此,系统主控平台应对系统提供的功能用列表的方式清晰的给人们呈现,并能正确的接受顾客的输入。
2、创建商品信息文件:
人们根据提示输入商品编号、名称、数量、保质期、生产地、供货商。
可一次性输入多条商品信息记录。
系统将商品信息记录存储在系统磁盘的文件中,以便进行管理和查找。
3、添加商品信息:
可在原有商品信息文件的基础上增加新的商品信息记录,并继续保存在磁盘中。
在增加新信息记录的过程中,系统同样会提示人们相应地填入商品的编号、名称、数量、保质期、生产地、供货商。
4、删除商品信息:
根据人们输入要进行删除操作的商品的编号,如果在文件中有该商品的
信息记录存在,则将提示人们是否确认将其删除,若确认,则将该编号所对应的名称等各种信息在对应文件中加以删除。
如果该商品不存在,则将显示“该商品不存在!按任意键退出”。
5、
修改商品信息:
提示人们输入要进行修改操作的商品编号,如果在文件中有该商品的信息记录存在,则将提示人们输入该编号的对应的商品编号、名称、数量、报质期、生产地、提供商等需要修改的选项,并将修改结果存储于文件。
6、
查询商品信息:
提示人们输入要查询的商品信息的编号,如果在磁盘文件中有对应商品信息记录,则将查询的商品的信息逐项列出。
查询完毕后可按任意键返回主键面。
7、
显示商品信息:
当人们选择了显示商品信息该选项后,系统会自动进入一个界面,一个将之前存储在这个文件中的所以商品的各项信息都逐个陈列出来的界面。
8、
排序全部信息:
当人们选择了排序全部信息该选项后,系统会自动进入一个界面,这个界面中的全部商品信息记录都按照编号排列(从小到大),以便人们能更直观的浏览到全部的商品信息。
3.软件总体设计
1、系统模块结构图
-----系统模块结构图----- 2
-----的
3、程序中各项功能具体定义:
4、程序中各项功能描述:
一:头文件,变量定义,函数的声明,定义结构体
定义结构体typedefstructpro为结构体命名Elemsn
对系统所使用的变量进行定义,对函数进行声明
二:商品库存管理系统主界面设计
声明函数voidmain(),对整个系统进行选择使用说明
三:创建商品库存信息
声明函数creatlink(),用Elemsn*creatlink(void)创建链
表信息
四:商品库存信息的添加
声明voidinsert()插入商品信息,先通过判断该商品是否存在,若不存在则继续输入,若是存在则跳出,重新循环
五:保存信息
voidsavelink()用于保存链表信息
六:商品库存信息的删除
声明voiddelet()实现商品信息删除,通过编号对比确定要删除的信息,然后用后一个替换掉。
七:商品库存信息的修改
声明voidmodify()为商品信息修改函数,通过switch(n)设定所要修改的项目
八:商品信息的查找
声明voidfind()为查找函数,通过switch(item)设定用编号查找
九:显示全部商品信息
通过voidprint()函数输出商品信息
十:商品信息的排序
声明voidsort()将录入商品的编号按升序排列,用的是“冒泡排序法”实现排序
3.1数据结构描述与定义
1、测量结构体变量的大小
#defineNsizeof(structpro)
2、商品库存信息数据结构
用于存放每个商品的编号、名称、数量、保质期、提供商和生产地各方面的信息。
typedefstructpro
{
charnumber[20];
charname[20];
charamount[20];
chardeadline[20];
charsupply[20];
charadd[20];
structpro*next;
}Elemsn;//为结构体命名//
用结构体定义商品信息。
由于编号、名称、价格、数量等是用于描述一个有机整体—商品,为了表明这些字段不是孤立的,而是共同描述一个完整的事物,因此用结构体这种形式来体现。
3.2模块设计
1、模块描述
对若干商品价格,名称,生产日期等记录进行创建商品信息文件、增加商品信息、删除商品信息、修改商品信息、查询商品信息、显示商品信息和排序全部信息几项功能管理。
对文件有修改的操作,会将操作结果保存至文件,对于需要查看结果的操作,文件中的操作结果将会显示于屏幕上。
2、模块设计
总体框架图:商品库存管理系统
1.添加商品信息
2删除商品信息
3修改商品信息
4查询商品信息
5.显示商品信息
6排序全部商品信息
3、系统模块流程图
-----系统模块结构图-----
4.测试结果与分析
执行效果如下:
1、主界面:
2、输入1后编辑的商品信息(创建新文件):
3、保存文件后,进入商品库存管理系统:
4、执行1添加功能:
5、执行2删除功能:
6、执行3修改功能:
7、执行4查询功能:
8、执行5显示功能:
9、执行6排序功能:
5.课程设计总结
经过一个礼拜的努力,终于,一个比较完整的小型商品库存管理系统就创建完毕了。
我们组创建的商品库存管理,系统能实现商品信息的添加,删除,修改,查询,显示,排序等简单的基本功能。
虽然这个课程设计是从寒假就开始准备了,但是说实话,在没有人能商量的情况下,我对这个课程设计的题目还是一头雾水的,虽然有上网查找资料并且问了家里有从事编程工作的亲戚,但是,我想说请原谅我的迟钝,因为我还是对课程设计无从下手。
来了学校后,因为开学的第三周是课程设计,我特地去问了学姐有关课程设计的信息,并去图书馆查了大量资料。
可能是由于资料的繁多重复吧,我没办法从里面理出头绪,所以我让组长给我整理了资料,十分感谢我们组的组长,他给我整理的资料很简练,在后面几天的编程中,我有不懂并且解决不了的程序问题,他都很耐心的帮我解答,调试。
从这次的课程设计,从组长那里,我想我学
到了很多,从第一天的无从下手到最后检验是能运行简单的功能操作,虽然程序还不是很完善,但是我还是感到很开心。
老师检验的时候,问了我这样一个问题,她问:你for循环体在哪里?好吧,我突然感觉很糟糕,因为我只看到一个分号,下面的printf并不是循环体,可是我不知道该怎么说,我想不起来那个叫什么,我那个程序里的for循环只是起到一个将信息全部读完的作用。
是的,很糟糕,真是太糟糕了。
好吧,我承认,我的基本功真的不扎实。
经过这次的课程设计,我觉得做一个系统真的需要很好的逻辑能力,并且你的基本功要扎实,不然大小错误会不断。
还有我发现当你只看不做的时候,觉得什么都不会,当你去尝试了去讨论了去做出结果了,可能结果不是很如人意,但是你会收获很多很多。
我很幸运我能有这样一次机会,对老师来说可能做的很糟,但是对我来说已经是个很大的突破了,因为我动手做了,动脑想了,还去讨论了,可以说是没什么遗憾了吧,唯一感到很遗憾的是一周的时间真的是太少了。
我想在以后在我学习了更多之后,我的程序会更好,到时候我希望自己能独立写出一个能运行的系统程序。
附录:源程序清单
#include"stdio.h"
#include"stdlib.h"
#include"string.h"
#include"conio.h"
#defineNsizeof(structpro)//测结构体变量的大小//
typedefstructpro
{
charnumber[20];
charname[20];
charamount[20];
chardeadline[20];
charsupply[20];
charadd[20];
structpro*next;
}Elemsn;//为结构体命名//
Elemsn*creatlink(void)//创建链表信息//
{
Elemsn*p1,*p2,*head;//p1为前驱,p2为后继//
inti=1;
charchoice;
head=p2=(Elemsn*)malloc(N);
head->next=NULL;
choice='y';
for(i=1;choice=='y'||choice=='Y';i++)
{
p1=(Elemsn*)malloc(N);
printf("******************************************************* ************************\n\n");
printf("请输入第%d个商品的信息:\n",i);
printf("编号:");
scanf("%s",p1->number);
printf("\n名称:");
scanf("%s",p1->name);
printf("\n数量:");
scanf("%s",p1->amount);
printf("\n保质期:");
scanf("%s",p1->deadline);
printf("\n供货商:");
scanf("%s",p1->supply);
printf("\n出产地:");
scanf("%s",p1->add);
p2->next=p1;
p2=p1;
printf("\n是否继续?(Y/N):");
choice=getche();
printf("\n");
}
p2->next=NULL;
return(head);
}
voidsavelink(Elemsn*h)//保存链表信息//
{
Elemsn*p;
FILE*fp;
charfliename[20];
printf("\n请输入你要保存的文件名:");
scanf("%s",fliename);
if((fp=fopen(fliename,"wt"))==NULL)
{
printf("写文件出错,按任意键退出!");
getche();
exit(1);
}
for(p=h->next;p!=NULL;p=p->next)fprintf(fp,"%s%s%s%s%s%s\n",p->n umber,p->name,p->amount,p->deadline,p->supply,p->add);//向文件中写入数据//
printf("文件已成功保存,按任意键返回!");
getche();
fclose(fp);
}
Elemsn*readlink(void)//读出已保存文件的信息//
{
Elemsn*head,*p,*q;
FILE*fp;
charfilename[20];
printf("\n请输入要打开的文件名:");
scanf("%s",filename);
if((fp=fopen(filename,"rt"))==NULL)
{
printf("读文件出错,按任意键退出!");
getche();
exit(1);
}
head=q=(Elemsn*)malloc(N);
head->next=NULL;
while(!feof(fp))
{
p=(Elemsn*)malloc(N);//建立新链表,并从文件中读出数据//
fscanf(fp,"%s%s%s%s%s%s\n",p->number,p->name,p->amount,p->deadl ine,p->supply,p->add);
q->next=p;
q=p;
}
q->next=NULL;
fclose(fp);
printf("文件信息已正确读出,按任意键返回!"); getch();
returnhead;
}
Elemsn*insert(Elemsn*head)//插入信息//
{
Elemsn*p;
p=(Elemsn*)malloc(N);
printf("\n请输入要插入商品的信息:\n");
printf("\n编号:");
scanf("%s",p->number);
printf("\n名称:");
scanf("%s",p->name);
printf("\n数量:");
scanf("%s",p->amount);
printf("\n保质期:");
scanf("%s",p->deadline);
printf("\n供货商:");
scanf("%s",p->supply);
printf("\n出产地:");
scanf("%s",p->add);
if(head->next!=NULL)
{
p->next=head->next;//插入数据操作代码//
head->next=p;
}
printf("\n商品信息插入成功!按任意键继续!");
getche();
returnhead;
}
Elemsn*delet(Elemsn*p0)//删除信息//
{
charnum[20];
Elemsn*p;
charchoice;
if(p0->next==NULL)
{
printf("该商品不存在!按任意键退出!");
getch();
exit(1);
}
printf("\n请输入要删除商品的编号:");
scanf("%s",num);
for(p=p0->next;strcmp(p->number,num)!=0;p0=p,p=p->next);//找到要删除的商品的信息//
printf("你要删除的信息如下,请确认是否删除:\n");
printf("\n编号:%s名称:%s数量:%s保质期:%s供货商:%s出产地:%s\n\n",p->number,p->name,p->amount,p->deadline,p->supply,p->add);
printf("\n是Y,否N:");//显示要删除的商品的信息//
choice=getche();
if(choice=='Y'||choice=='y')
{
p0->next=p->next;
free(p);
printf("\n文件删除成功!");
}
printf("\n按任意键结束!");
getche();
returnp0;
}
Elemsn*modify(Elemsn*h)//修改信息//
{
charnum[20];
Elemsn*p;
charchoice;
printf("\n请输入要修改商品信息的编号:");
scanf("%s",num);
for(p=h;strcmp(p->number,num)!=0;p=p->next);//找到要修改的商品的信息//
while(1)
{
printf("请输入修改后商品的信息:\n");
printf("编号:");
scanf("%s",p->number);
printf("\n名称:");
scanf("%s",p->name);
printf("\n数量:");
scanf("%s",p->amount);
printf("\n保质期:");
scanf("%s",p->deadline);
printf("\n供货商:");
scanf("%s",p->supply);
printf("\n出产地:");
scanf("%s",p->add);
printf("修改后商品信息如下:\n");
printf("\n编号:%s名称:%s数量:%s保质期:%s供货商:%s出产地:%s\n\n",p->number,p->name,p->amount,p->deadline,p->supply,p->add);
printf("\n确认?是Y否N:");
choice=getche();
if(choice=='y'||choice=='Y')break;
}
printf("\n修改成功,按任意键继续!");
getche();
returnh;
}
voidfind(Elemsn*h)//查询信息//
{
charnum[20];
Elemsn*p;
printf("\n请输入你要查找的商品的编号:");
scanf("%s",num);
for(p=h;strcmp(p->number,num)!=0;p=p->next);
printf("你查找的商品信息如下:\n");
printf("\n编号:%s名称:%s数量:%s保质期:%s供货商:%s出产地:%s\n\n",p->number,p->name,p->amount,p->deadline,p->supply,p->add);
printf("按任意键继续!");
getche();
}
voidprint(Elemsn*p)//显示全部信息//
{
p=p->next;
while(p!=NULL)
{
printf("\n编号:%s名称:%s数量:%s保质期:%s供货商:%s出产地:%s\n",p->number,p->name,p->amount,p->deadline,p->supply,p->add);
p=p->next;
}
printf("\n按任意键继续!");
getche();
}
Elemsn*sort(Elemsn*head)
{
Elemsn*q,*t,*p;
p=head;
t=NULL;
while(t!=head->next)
{
p=head;
q=p->next;
while(q->next!=t)
{
if(strcmp(p->next->number,q->next->number)>0)/*前结点和后结点比较大小*/
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
}
p=p->next;
q=p->next;
}
t=q;
}
printf("商品信息排序完毕,按任意键继续!");
getche();
print(head);
return(head);/*返回头指针*/
}
voidmain()
{
intchoice=1,i,ok=1;//choice用于选择对数据执行操作,i循环,ok主界面选择//
Elemsn*head,*h;
head=NULL;
for(i=1;ok!=0;i++)
{
system("cls");
printf("\n欢迎来到商品库管理系统主界面!\n\n\n");
printf("\n\n\n1.创建新文件.\n\n\n");
printf("2.读取原文件,并执行相应操作.(原文件名为:jxx)");
printf("\n\n\n0.退出;");
printf("\n\n\n\n\n请选择你要执行的操作:");
scanf("%d",&ok);
if(ok==1)
{
system("cls");
head=creatlink();//创建新链表并保存文件//
savelink(head);
}
if(ok==2)
{
head=readlink();//进入文件,对已知数据进行操作//
for(i=1;choice!=0;i++)
{
system("cls");
printf("************欢迎来到商品库管理系统************\n\n\n"); printf("1.添加商品信息;\n\n");
printf("2.删除商品信息;\n\n");
printf("3.修改商品信息;\n\n");
printf("4.查询商品信息;\n\n");
printf("5.显示商品信息;\n\n");
printf("6.排序全部信息;\n\n");
printf("0.退出;\n\n");
printf("请输入你要执行的操作代码:");
scanf("%d",&choice);
switch(choice)
{
case1:h=insert(head);savelink(h);break;//执行增,删,改完毕后对新信息进行保存//
case2:h=delet(head);savelink(h);break;
case3:h=modify(head);savelink(h);break;
case4:find(head);break;
case5:print(head);break;
case6:h=sort(head);savelink(h);break;
case0:break;
}
}
}
}
}。