c语言课程设计商场商品信息系统,C语言课程设计商场商品管理信息系统

C语言课程设计商场商品管理信息系统

目 录1 系统分析11.1 课程设计内容11.2 系统功能需求分析11.3 数据结构设计22 系统设计22.1 总体设计22.2 详细设计22.2.1 界面设计22.2.2 各功能模块的设计23 系统编码设计23.1 main函数23.2 load函数23.3 creat创建链表函数23.4 search函数23.5 add数23.6 amend函数23.7 del函数23.8 purchase函数23.9 sales函数23.10 print函数23.11 save函数23.12 menu函数24 系统运行25 总结21 系统分析1.1 课程设计内容设计一商场商品信息管理系统,功能包括:1. 文件操作:可建立、打开、保存、关闭数据文件。2. 输入商品信息数据:数据包括商品编号、商品名、商品类别、商品数量、 商品价格等。3. 编辑数据:可添加、删除、修改数据。4. 输入进货、销售信息:输入商品编号、数量完成进货或销售操作。5. 计算:应在输入进货及销售信息时,自动更改商品数量。6. 查询:可按商品编号、商品名或类别查询;还可查询需进货的商品。7. 排序:可按编号、名称或类型排序。8. 浏览:可浏览输入、查询或排序后的数据。1.2 系统功能需求分析本系统应具有以下功能:1、文件操作功能:可建立、打开、保存、关闭数据文件。2、数据输入功能: 数据包括商品编号、商品名、商品类别、商品数量、 商品价格等。以及输入商品编号、数量完成进货或销售操作。3、数据添加、修改、删除功能4、计算功能:在输入进货及销售信息时,自动更改商品数量。5、查询功能:可按商品编号、商品名或类别查询;还可查询需进货的商品。6、排序功能:可按编号、名称或类型排序。7、数据显示功能:可浏览输入、查询或排序后的数据。1.3 数据结构设计struct shangpingxinxi /*结构体,用于存放主要数据*/long number; /*商品编号*/char name100; /*商品名*/char leibie100; /*商品类别*/int kucun; /*库存量*/float jiage; /*商品价格*/struct shangpingxinxi *next; /*指向下一个结构体的指针*/int n,k; /*全局变量*/struct shangpingxinxi *head; /*局部变量*/struct shangpingxinxi *p1,*p2,*p3; /*局部变量*/char temp20; /*局部变量*/int/long/char/float a,b,c,d,e,f,i,j; /*局部变量*/ FILE *fp; /*局部变量,用于指向文件*/2 系统设计2.1 总体设计按系统分析的功能要求将系统划分为以下几个主要功能模块:2.2 详细设计2.2.1 界面设计1、菜单设计2、输入界面的设计输入商品编号:提示输入7位商品编号。编号应为首位不为0的数字编号,当输入字符和非7位数字时提示错误;添加商品时,还应检查是否有重复编号,如有重新输入。输入商品名称: 提示输入商品名称。可输入任意字符串,但为了对齐最好不超过八个字符,以回车为输入结束。输入商品类型:提示输入商品类型。可输入任意字符串,但为了对齐最好不超过八个字符,以回车为输入结束。输入商品库存:提示输入大于零的商品库存(大于0)。可输入032767的任意数字,当输入为字符和小于0的数字时提示错误,重新输入。输入商品价格:提示输入大于零的商品价格(大于0)。可输入03.41038的任意浮点数,当输入为字符和小于0的数字时提示错误,重新输入。3、信息显示界面的设计u 菜单信息显示:在页面中央以阶梯状加半框形式显示,页面底部显示提示信息。u 商品信息显示:应显示商品编号、商品名称、商品类别、库存数量、商品价格五种信息,并以表格形式显示。2.2.2 各功能模块的设计根据划分的功能模块,定义以下函数实现各功能:(这部分应介绍各函数的原型,各功能模块实现所用的算法,可用流程图描述)1、主函数main()定义变量进入欢迎界面输入密码Y 密码正确? N进入主菜单返回重新输入密码k=1 读取文件k=2 创建信息k=3 查询信息k=4 修改信息k=5 删除信息k=6 添加信息k=7 进货信息k=8 销售信息k=9 浏览信息k=10 保存文件switch(k)返回主菜单退出程序2、读取文件函数struct shangpingxinxi *load(struct shangpingxinxi *head)定义变量输入所要打开的文件路径及文件名Y 文件是否存在 N打开文件退出本函数读取文件中的目录开辟一个内存空间读取一个信息再开辟一个空间再开辟一个内存空间读取信息到内存空间if(p1-number!=0)关闭文件输出读入的信息到屏幕退出本函数3、创建链表函数(输入数据函数)struct shangpingxinxi *creat(void)定义变量开辟一个内存空间输入商品编号并判断是否有效和重复输入商品名称并判断是否有效输入商品类别并判断是否有效输入商品库存并判断是否有效输入商品价格并判断是否有效开辟内存空间判断是否输入结束退出函数4、查询函数struct shangpingxinxi *search(struct shangpingxinxi *head)定义变量Y 内存中是否有数据信息 N进入选择菜单退出此函数a=1 按商品编号查询a=2 按商品名查询a=3 按商品类别查询a=4 查询需进货商品switch(a)返回选择菜单退出此函数5、添加函数struct shangpingxinxi *add(information *head,information *newgoods)定义变量开辟一个新内存空间输入需添加商品的编号并判断是否合法和重复输入需添加商品的名称输入需添加商品的类别输入需添加商品的库存判断是否合法输入需添加商品的价格判断是否合法Y 是否保存 N将所开辟空间链接到已有链表末尾返回重输退出此函数6、修改函数struct shangpingxinxi *amend(struct shangpingxinxi *head)定义变量Y 内存中是否有数据 N输入需修改的商品编号并查询是否存在退出此函数输入修改后的商品编号并判断是否合法和重复输入修改后的商品名称输入修改后的商品类别输入修改后的商品库存并判断是否合法输入修改后的商品价格并判断是否合法显示修改后的信息Y 确认修改? N 修改成功返回重输退出此函数7、删除函数struct shangpingxinxi *del(struct shangpingxinxi *head)定义变量Y 内存中是否有数据 N输入需删除的商品编号退出此函数Y 是否存在? N显示该商品信息返回重输Y 是否删除? N删除该商品信息返回重输退出此函数8、进货函数struct shangpingxinxi *purchase(struct shangpingxinxi *head)定义变量Y 内存中是否有数据 N输入所进货商品的编号退出此函数Y 是否存在? N显示该商品信息返回重输输入进货量显示该商品信息退出此函数9、销售函数struct shangpingxinxi *sales(struct shangpingxinxi *head)定义变量Y 内存中是否有数据 N输入所销售商品的编号退出此函数Y 是否存在? N显示该商品信息返回重输输入销售量Y 库存销售量? N显示该商品信息返回重输退出此函数10、排序函数(输出函数)void print(struct shangpingxinxi *head)定义变量Y 内存中是否有数据信息 N进入选择菜单退出此函数a=1 按商品编号顺序浏览a=2 按商品名顺序浏览a=3 按商品类别顺序浏览a=0 返回选择菜单switch(a)退出此函数11、保存函数void save(struct shangpingxinxi *p1)定义变量Y 内存中是否有数据 N输入文件地址和文件名退出此函数Y 能否打开? N打开文件退出此函数把内存中的信息保存到文件在屏幕上显示信息关闭文件退出此函数3 系统代码设计3.1 main函数#include malloc.h#include stdio.h#include string.h#include stdlib.h#define LEN sizeof(struct shangpingxinxi)struct shangpingxinxilong number;/*7位商品编号*/char name100;/*商品名*/char leibie100;/*商品类别*/int kucun;/*库存量*/float jiage;/*商品价格*/struct shangpingxinxi *next;typedef struct shangpingxinxi information;int n,k;/*n,k为全局变量,本程序中的函数均可以使用它*/void main() /*主函数main,功能:通过调用各函数,实现商品信息管理系统的功能*/information *head=0,*newgoods=0;int k=0;char a10;int j;char ch;pp:system(cls);/*清屏*/printf(请输入密码:);j=0;while(ch=getch()!=13) putchar(*);aj=ch;j+;aj=0; if(strcmp(a,zeus)!=0)printf(nn密码错误!);getch();goto pp;system(cls);/*清屏*/lp:k=menu(k);switch(k)/*用switch语句实现功能选择*/case 1: head=load(head);break;/*从文件调入记录函数*/case 2: head=creat();break;/*调用创建链表函数*/case 3: head=search(head);break;/*调用信息查询函数*/ case 4: head=amend(head);break;/*调用修改信息的函数*/ case 5: head=del(head); break;/*调用删除信息函数*/case 6: head=add(head,newgoods);break;/*调用追加信息资料函数*/case 7: head=purchase(head);break;/*调用输入进货信息的函数*/ case 8: head=sales(head);break;/*调用输入销售信息的函数*/ case 9: print(head); break;/*调用显示信息资料函数*/ case 10:save(head);break;/*调用保存函数*/case 0: exit(0);/*退出系统,返回主界面*/default: printf(输入错误,请重试!n); goto lp;3.2 load函数information *load(information *head)/*函数load,功能:从文件读入商品信息*/information *p1,*p2;char filepn10;FILE *fp;system(cls);/*清屏*/ printf(请输入文件路径及文件名:);scanf(%s,filepn);/*输入文件路径及名称*/if(fp=fopen(filepn,r+)=NULL)printf(不能打开文件!n);getch();system(cls);/*清屏*/ return 0;fp=fopen(filepn,r+);fscanf(fp,n商品编号t商品名称t商品类别t库存数量t商品价格n);n=0;p1=p2=(information *)malloc(LEN); /*开辟一个新单元*/fscanf(fp,%ldtt%stt%stt%dtt%fn,&p1-number,&p1-name,&p1-leibie,&p1-kucun,&p1-jiage);head=p1;ll:n=n+1;p2=p1;p1=(information *)malloc(LEN); /*开辟一个新单元*/fscanf(fp,%ldtt%stt%stt%dtt%fn,&p1-number,&p1-name,&p1-leibie,&p1-kucun,&p1-jiage);p2-next=p1;if(p1-number!=0)goto ll;p2-next=NULL;fclose(fp);/*结束读入,关闭文件*/printf(n总有%d种商品的信息:n,n);printf(n商品编号t商品名称t商品类别t库存数量t商品价格n);p2=p1=head;doprintf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);p1=p1-next;while(p1!=NULL);getch();system(cls);/*清屏*/ return (head);3.3 creat创建链表函数information *creat(void)/*函数creat,功能:创建链表,此函数带回一个指向链表头的指针*/information *head;information *p1,*p2,*p3;int i;system(cls);/*清屏*/n=0;p1=p2=p3=(information *)malloc(LEN);head=p3; /*开辟一个新单元*/repeat1: printf(请输入7位商品编号(退出请按“0”):);/*输入编号,编号应大于0*/scanf(%d,&p1-number);if(p1-number=0)goto end;elsewhile(p1-number|p1-number=)printf(输入错误!);goto repeat1; p3=head;if(n0)for(i=0;in;i+)if(p1-number!=p3-number)p3=p3-next;else printf(编号重复,请重输!n);goto repeat1;/*当输入的编号已经存在,程序报错,返回前面重新输入*/ printf(请输入商品名:);scanf(%s,&p1-name);/*输入商品商品名*/printf(请输入商品类别:);/*输入商品类别*/scanf(%s,&p1-leibie);printf(请输入商品库存(大于0):);/*输入商品库存*/scanf(%d,&p1-kucun);while(p1-kucun0)printf(输入错误,请重新输入商品数量);/*输入错误,重新输入商品库存直到正确为止*/scanf(%d,&p1-kucun);printf(请输入商品价格(大于0):);/*输入商品价格*/scanf(%f,&p1-jiage);while(p1-jiage0)printf(输入错误,请重新输入商品价格);scanf(%f,&p1-jiage);/*输入错误,重新输入商品价格直到正确为止*/head=NULL;while(p1-number!=0)n=n+1;if(n=1) head=p1;elsep2-next=p1;p2=p1;p1=(information *)malloc(LEN);repeat2:printf(请输入7位商品编号(退出请按“0”):);scanf(%d,&p1-number);/*输入编号,编号应大于0*/if(p1-number=0)goto end;elsewhile(p1-number|p1-number=)printf(输入错误!);goto repeat2; p3=head;if(n0)for(i=0;in;i+)if(p1-number!=p3-number)p3=p3-next;else printf(编号重复,请重输!n);goto repeat2;/*当输入的编号已经存在,程序报错,返回前面重新输入*/ printf(请输入商品名:);scanf(%s,&p1-name);/*输入商品商品名*/printf(请输入商品类别:);/*输入商品类别*/scanf(%s,&p1-leibie);printf(请输入商品库存(大于0):);/*输入商品库存*/scanf(%d,&p1-kucun);while(p1-kucun0)printf(输入错误,请重新输入商品数量);/*输入错误,重新输入商品库存直到正确为止*/scanf(%d,&p1-kucun);printf(请输入商品价格(大于0):);/*输入商品价格*/scanf(%f,&p1-jiage);while(p1-jiage0)printf(输入错误,请重新输入商品价格);scanf(%f,&p1-jiage);/*输入错误,重新输入商品价格直到正确为止*/end: p1=head;p3=p1;p2-next=NULL;/*链表结尾*/printf(nn输入的商品数为:%d个!n,n);getch();system(cls);/*清屏*/return(head);3.4 search函数information *search(information *head)/*函数search,功能:查询商品信息*/information *p1,*p2;int a,b;long c;char t100;system(cls);/*清屏*/if(head=NULL)printf(nnn没有任何商品资料,请先建立商品资料!n);getch();system(cls);return(head);p2=p1=head;lp2:system(cls);/*清屏*/printf(nnnn);printf( $n);printf( $n);printf( $ 1 *按商品编号查询n);printf( $n);printf( $t 2 *按商品名称查询n);printf( $n);printf( $tt 3 *按商品类别查询ttt $n);printf( $ttttttt $n);printf( ttt 4 *查询需进货商品(库存小于50) $n);printf(tttttttt $);printf( tttttt 0 *退出tt $n);printf(tttttttt $);printf(ntttt $);printf(nnnnnn);printf(请选择您所要的查询方式:);scanf(%d,&a);/*选择操作*/switch(a)/*用switch语句实现功能选择*/*=*/case 1:system(cls);/*清屏*/lp3:printf(请输入所要查询商品的7位编号(按0返回选择界面):);lp10:scanf(%ld,&c);b=0;if(c=0)goto lp2;while(c|c=)printf(输入错误n);goto lp3; while(c!=0)p1=head;while(c!=p1-number&p1-next!=NULL)p2=p1;p1=p1-next; if(c=p1-number) printf(n商品编号t商品名称t商品类别t库存数量t商品价格n);printf(%ldtt%stt%stt%dtt%.2fnn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);b=1;if(b=0)printf(不存在%d该商品!n,c);printf(请输入要查询的商品的编号(按0返回选择界面):);goto lp10;break;/*=*/case 2:system(cls);/*清屏*/lp7:printf(输入所要查询商品的名称(按0返回选择界面):);scanf(%s,&t);b=0;if(strcmp(t,0)=0)goto lp2;while(strcmp(t,0)!=0) p1=head;if(strcmp(t,p1-name)!=0&p1-next!=NULL)p2=p1;p1=p1-next;if(strcmp(t,p1-name)=0)printf(n商品名称t商品编号t商品类别t库存数量t商品价格n);printf(%stt%ldtt%stt%dtt%.2fn,p1-name,p1-number,p1-leibie,p1-kucun,p1-jiage);b=1;if(b=0)printf(n不存在%s该商品!n,t);printf(n请输入要查询的商品的名称(按0返回选择界面):);scanf(%s,&t);elsegoto lp7;break;/*=*/case 3:system(cls);/*清屏*/lp8:printf(输入所要查询商品的类别(按0返回选择界面):);scanf(%s,&t);b=0;if(strcmp(t,0)=0)goto lp2;p1=head;printf(n商品类别t商品编号t商品名称t库存数量t商品价格n);doif(strcmp(t,p1-leibie)=0) printf(%stt%ldtt%stt%dtt%.2fn,p1-leibie,p1-number,p1-name,p1-kucun,p1-jiage);b+;p1=p1-next;while(p1!=NULL);if(b=0)printf(n不存在%s该类型商品!n,t);goto lp8;goto lp8;break;/*=*/case 4:system(cls);/*清屏*/ b=0;printf(商品编号t商品名称t商品类别t库存数量t商品价格n);p1=head;if(head!=NULL)doif(p1-kucun50)printf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);b+;p1=p1-next;while(p1!=NULL);printf(n需要进货的商品有以上%d种!,b);getch();system(cls);/*清屏*/;break;case 0: system(cls);return(head);default: printf(输入错误,请重试!n); goto lp2; 3.5 add数information *add(information *head,information *newgoods)/*函数add,功能:追加商品信息*/information *p0,*p1,*p2;int i,a;p1=newgoods=(information *)malloc(LEN);/*开辟一个新单元*/system(cls);/*清屏*/repeat:printf(请输入你想添加的商品的7位商品编号(退出请按“0”):);scanf(%ld,&newgoods-number);if(newgoods-number=0)goto end2;else while(p1-number|p1-number=)printf(输入错误,请重新输入7位商品编号:);scanf(%d,&p1-number); p1=head;if(n0)for(i=0;in;i+)if(newgoods-number!=p1-number)p1=p1-next;else printf(编号重复,请重输!n);goto repeat;printf(请输入商品名:);scanf(%s,&newgoods-name);printf(请输入商品类别:);scanf(%s,&newgoods-leibie);printf(请输入商品库存(大于0):);/*输入商品库存*/scanf(%d,&newgoods-kucun);while(newgoods-kucun0)printf(输入错误,请重新输入商品数量);/*输入错误,重新输入商品库存直到正确为止*/scanf(%d,&newgoods-kucun);printf(请输入商品价格(大于0):);/*输入商品价格*/scanf(%f,&newgoods-jiage);while(newgoods-jiage0)printf(输入错误,请重新输入商品价格);scanf(%f,&newgoods-jiage);printf(n商品编号t商品名称t商品类别t库存数量t商品价格n); printf(%ldtt%stt%stt%dtt%.2fn,newgoods-number,newgoods-name,newgoods-leibie,newgoods-kucun,newgoods-jiage);printf(你确定要新增这个商品吗?n);printf(是请按(1),否请按(0)!n);scanf(%d,&a);if(a=1)p0=head;p2=newgoods;if(head=NULL)head=p2;p2-next=NULL;/*当原来链表为空时,从首结点开始存放资料*/else/*原来链表不为空*/if(p0-next=NULL)/*找到原来链表的末尾*/p0-next=p2;p0-next=NULL;/*将它与新开单元相连接*/elsewhile(p0-next!=NULL)/*还没找到末尾,继续找*/p2=p0;p0=p0-next;p0-next=p2;p2-next=NULL;n=n+1;printf(n输入的商品数为:%d个!n,n);else goto repeat;getch();end2: system(cls);/*清屏*/return(head);3.6 amend函数information *amend(information *head)/*定义一个修改商品信息信息的函数。此函数带回一个指向链表头的指针*/int t;long num;information *p1,*p2;system(cls);/*清屏*/if(head=NULL)printf(nnn没有任何商品资料,请先建立商品资料!n);getch();system(cls);return(head);printf(输入要修改的7位商品的编号(按0退出):);pp:scanf(%ld,&num);if(num=0)system(cls);goto end;elsewhile(num|num=)printf(输入错误,请重新输入商品编号:);scanf(%d,&num); while(num!=0)p1=head;while(num!=p1-number&p1-next!=NULL)p2=p1;p1=p1-next; if(num=p1-number) printf(n商品编号t商品名称t商品类别t库存数量t商品价格n);printf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);printf(修改请按(1)!退出请按(0)!);scanf(%d,&t);if(t=1)rt:printf(请输入修改后的编号:);scanf(%ld,&p1-number);while(p1-number|p1-number=)printf(输入错误,请重新输入7位商品编号:);scanf(%d,&p1-number); printf(请输入修改后的商品名:);scanf(%s,&p1-name);printf(请输入修改后的商品类别:);scanf(%s,&p1-leibie);printf(请输入修改后的库存数量(大于0):);scanf(%d,&p1-kucun);while(p1-kucun0)printf(输入错误,请重新输入商品数量);/*输入错误,重新输入商品库存直到正确为止*/scanf(%d,&p1-kucun); printf(请输入修改后的商品价格(大于0):);scanf(%f,&p1-jiage);while(p1-jiage0)printf(输入错误,请重新输入商品价格);scanf(%f,&p1-jiage); printf(修改后的商品信息为:);printf(n商品编号t商品名称t商品类别t进货数量t商品价格n);printf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);printf(确认请按(1)!重新请按(2)!n);scanf(%d,&t);if(t=1)system(cls);return(head);else goto rt;else system(cls);return(head);else printf(%d不存在此商品!n,num);printf(请输入要查询的商品的编号(按0退出):);goto pp;end:return(head);3.7 del函数information *del(information *head)/*函数del,功能:删除商品信息*/information *p1,*p2;int a;long num;system(cls);/*清屏*/if(head=NULL)printf(nnn没有任何商品资料,请先建立商品资料!n);getch();system(cls);return(head);lp:printf(请输入你需要删除的商品的编号(7位)(按0退出):);scanf(%ld,&num);if(num=0)system(cls);return (head);while(num|num=)printf(输入错误,请重新输入商品编号:);scanf(%d,&num); p1=head;while(num!=p1-number&p1-next!=NULL)/*p1指向的不是所要找的首结点,并且后面还有结点*/p2=p1;p1=p1-next; /*p1后移一个结点*/if(num=p1-number)/*找到了*/ printf(n商品编号t商品名称t商品类别t库存数量t商品价格n);printf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);printf(你确定要删除这个商品的信息吗?n);printf(是请按(1),否请按(0)!n);scanf(%d,&a);if(a=1)if(p1=head)head=p1-next;/*若p1指向的是首结点,把地二个结点地址赋予head*/else p2-next=p1-next;/*否则将下一个结点地址 赋给前一结点地址*/printf(已经删除了该商品!n);n=n-1;elsegoto lp;elseprintf(没有找到%l这件商品!,num); /*找不到该商品*/goto lp;printf(n现在的商品数为:%d个!n,n);getch();system(cls);return(head);3.8 purchase函数information *purchase(information *head)/*定义输入进货信息的函数。此函数带回一个指向链表头的指针*/int t;long num;information *p1,*p2;system(cls);/*清屏*/if(head=NULL)printf(nnn没有任何商品资料,请先建立商品资料!n);getch();system(cls);return(head);printf(请输入所进商品的商品7位编号(按0退出):);lp3:scanf(%ld,&num);if(num=0)system(cls);goto end;while(num|num=)printf(输入错误,请重新输入商品编号:);goto lp3; while(num!=0)p1=head;while(num!=p1-number&p1-next!=NULL)p2=p1;p1=p1-next; if(num=p1-number) printf(n该商品的信息是:n);printf(n商品编号t商品名称t商品类别t库存数量t商品价格n);printf(%ldtt%stt%stt%dtt%.2fn,p1-number,p1-name,p1-leibie,p1-kucun,p1-jiage);printf(n请输入该商品的进货量:);scanf(%d,&t);p1-kucun=p1-kucun+t;printf(n该商品现在的信息是:);printf(n商品编号

你可能感兴趣的:(c语言课程设计商场商品信息系统)