超市商品管理系统C语言版(文件读取)
- 格式:doc
- 大小:45.00 KB
- 文档页数:8
实验题目:超市管理系统一、实验目的1.熟悉 c 语言的编译连接和运行过程。
2.掌握 c 语言的数据类型,熟悉整型、实型、字符型变量的定义方式及如何给它们赋值。
3.掌握if 语句及switch 语句的运用方法及嵌套应用方法。
4.掌握实现循环结构的三种语句while 、do-while. 、for 的使用。
5.掌握函数的定义方法和调用方法。
6.能够采用模块化思想调试程序。
二.实验内容1.编写程序并进行调试运行。
2.输入商品资料,并保存于文件。
每件商品包含信息如:商品号、商品名、商品类别、商品总量、商品上限和下限、商品价格、进货日期、生产日期、保质期等。
3.对已存入的商品信息进行更新操作,包括添加一件商品信息、删除某件商品信息和修改商品信息。
4.通过按商品名、商品种类、商品进货量的方式查询商品信息。
5.输入某商品号后对其利润进行统计、对进货价格相同的商品进行统计。
6 对商品的库存量和利润进行排序。
7.最后输出商品信息,供需要时打印。
二、需求分析1.该程序可用于对商品的基本信息的存储、更新、查询、输出、统计、排序等操作,以实现管理者对商品的管理和消费者对商品的了解。
2.其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多件商品信息,也可对个别商品信息进行适当的删除或修改。
以便随时更新商品信息。
3.程序中设计的查询功能可根据需要从若干数据中查询某件商品信息,并且可根据三种不同的方法查询:按商品名查询、按商品种类查询和按商品进货量查询。
以满足不同的需要。
四、概要设计1、方案设计对系统进行分析,给出结构图分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计—自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计结构图如下:超市管理管理系统查询模块排序模块退出系统退出系统查询模块排序模块统计模块*更新模块*输出信息¥录入信息按商品名查询利润排行库存量排行退出系统第二类商品第一类商品退出系统2 •功能模块说明:对各个模块进行功能的描述(1).输入模块:录入需要管理的商品信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
题目:超市商品管理系统2.2 详细设计 (3)2.2.1 数据结构设计 (3)2.2.2 主控流程 (3)2.2.3 信息输入模块 (4)2.2.4 信息增加模块 (4)2.2.5 信息修改模块 (4)2.2.6 信息删除模块 (4)2.2.7 信息查看模块 (4)2.2.8 信息统计模块 (4)2.2.9 函数功能描述 (4)实训报告3 系统实现 (5)3.1 编码 (5)3.1.1 程序预处理 (5)3.1.2 主函数main() (5)3.1.3 主菜单界面 (6)3.1.4 商品信息建立 (7)3.1.5 商品信息查看 (9)3.1.6 商品信息增加 (11)3.1.7 商品信息删除 (12)3.1.8 商品信息修改 (14)3.1.9 商品数目统计 (16)超市管理系统主界面2、系统设计2.1 总体设计本程序采用模块化设计方法,即将一个大任务分成一个个小任务,然后分别设计个小任务。
划分出来的模块相对独立而又相互关联,容易理解。
本程序由5大模块组成:1.输入信息模块2.增加信息模块3.修改信息模块4.删除信息模块5.统计信息模块2.2 详细设计定义结构体struct good{char unit[10]; /*商品单位*/int quantity; /*商品数量*/struct good *next; /*定义结构体指针类型*/ }*head,*p1,*p2;2.2.2 主控main()函数执行流程Int main()struct good *p1,*p2;while(1){if(m==1)printf("********************************商品信息的查看*******************************\n");if(m==2){入计出return 0;}本商品管理系统执行主流程。
它先以可读写的方式打开数据文件,此文件默认为“C:\goods list.txt”,若该文件不存在,则新建此文件。
超市商品管理系统C语言源代码SANY GROUP system office room 【SANYUA16H-SANYHUASANYUA8Q8-#include <stdio.h>#include <math.h>#include <string.h>#include<conio.h>#include<stdio.h>#include<string.h>#define MAX 20#define PRINT1 printf("---------------------------------------------------------\n")#define PRINT2 printf("商品号--商品名称--商品种类--销售价格--生产日期(年-月-日)--保质期\n")#define PRINT3 printf("M%8s%8s崓----M\n",goods[i].num,goods[i].name,goods[i].kind,goods[i].out_price,goods[i ].pro_time.year,goods[i].pro_time.month,goods[i].pro_time.day,goods[i].s ave_day)int sum;struct date{int year;int month;int day;};struct goods_type /*定义结构体*/{int num;char name[10];char kind[10];int amount;int in_price;int out_price;struct date pro_time;int save_day;int profit;}goods[MAX];Save_Message(int sum); /*函数声明*/void Inquire_message(void);void Inquire_goodskind(void);void Inquire_goodsname(void);int Read_Message(void);void Renew_Messahe(void);void Revise_Message(void);void Delete_Message(void);void Insert_Message();void Show_Message(void);int Input_Message(void);void Count_Message();long Count_Profit();long Count_Amount();void Sort_amount(void);void Sort_Message(void);void Sort_Message(void){int choice;do{clrscr();printf("\n\n\n *******商品信息排行********\n\n");printf(" 1:按库存量排行\n\n");printf(" 0:返回主菜单\n\n");printf(" 请选择(0-1): ");scanf("%d",&choice);switch(choice){case 1:Sort_amount();break;case 0:break;}}while(choice!=0);}void Sort_amount(void) /*库存量排序*/{struct goods_type *p,*q[MAX];int i,j,k;clrscr();printf(" 库存排行");PRINT1;printf("\n\n排名商品号商品名称商品类别库存量\n\n"); p=goods;for(i=0;i<sum;i )q[i]=p ;for(i=0;i<sum;i ){k=i;for(j=i 1;j<sum;j )if(q[k]->amount<q[j]->amount)k=j;if(k!=i){p=q[i];q[i]=q[k];q[k]=p;}}for(i=0;i<sum;i ){printf(" %d ",i 1);printf(" %d ",q[i]->num);printf(" %s ",q[i]->name);printf(" %s ",q[i]->kind);printf(" %d \n ",q[i]->amount);}bioskey(0);}long Count_Amount() /*统计库存量*/ {int i,j=0,choice,count_num,Amount;char inquire_name[10];clrscr();printf("\n 请输入想要统计的商品号: "); scanf("%d",&count_num);for(i=0;i<sum;i )if(goods[i].num==count_num){Amount=goods[i].amount;printf("-------------------------"); printf(" 商品号库存量");printf("\n崓",goods[i].num,Amount); }elsej ;if(j==sum)printf("该商品信息不存在!!!");bioskey(0);}long Count_Profit() /*统计利润模块*/{int i,choice,j=0,count_num,profit;clrscr();printf("\n 请输入想要统计的商品号: ");scanf("%d",&count_num);for(i=0;i<sum;i )if(goods[i].num==count_num){profit=goods[i].out_price-goods[i].in_price;printf("\n 商品利润");printf("\n -------------------------------");printf("\n 商品号利润");printf("\n 崓\n",&goods[i].num,&profit);}elsej ;if(j==sum)printf("\n 该商品不存在!!!");printf("\n 按任意键返回主菜单!!");bioskey(0);}void Count_Message(void) /*统计模块*/{int choice;do{clrscr();printf("**************统计商品信息*************\n\n\n");printf("******* 1:统计库存量 ************\n\n\n"); printf("******* 2:统计利润 ************\n\n\n");printf("******* 0:返回主菜单 ************\n\n\n");printf("******* 请选择(0-2): ************\n\n\n");scanf("%d",&choice);switch(choice){case 1:Count_Amount();break;case 2:Count_Profit();break;case 0:break;}}while(choice!=0);}int Input_Message(void) /*输入模块*/{int i=0,s=MAX;char bd;clrscr();printf("开始输入商品信息.\n");printf("\n\n 商品信息:(最多 %d) \n",s);printf(" ===============================\n");do{printf("\n 第 %d 商品",i 1);printf("\n 商品号: ");scanf("%d",&goods[i].num);if(goods[i].num==0) break;printf("\n 商品名称: ");scanf ("%s",goods[i].name);printf("\n 商品种类: ");scanf ("%s",goods[i].kind);printf("\n 商品库存量: ");scanf ("%d",&goods[i].amount);printf("\n 进货价格: ");scanf ("%d",&goods[i].in_price);printf("\n 销售价格: ");scanf ("%d",&goods[i].out_price);printf("\n 生产日期(yyyy-mm-dd): ");scanf ("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time. day);printf("\n 保质期: ");scanf ("%d",&goods[i].save_day);printf("继续输入信息,y or n ??");fflush(stdin);scanf("%c",&bd);if(bd=='y')i ;elsebreak;}while(i<MAX);printf("\n--%d 所有商品录入完毕!--\n\n\n",i 1);getch();printf(" 按任意键返回主菜单.");sum=i;printf("输入回车返回主菜单!!!");bioskey(0);}void Show_Message(void) /*显示输出模块*/{int i=0,j=0,count,page=7;clrscr();printf("\n\n --商品信息-- 在第 %d 页\n\n",page);PRINT2;PRINT1;do{if(goods[i].num!=0){j ;if(j%page!=0){PRINT3;PRINT1;}else{PRINT3;PRINT1;if(goods[i 1].num!=0){printf("按任意键继续!");bioskey(0);clrscr();printf("\n\n --------商品信息--------在第 %d 页\n\n", page);PRINT2;PRINT1;}}}i ;}while(goods[i].num!=0);printf("按任意键返回主菜单!!!!!");bioskey(0);}void Insert_Message(void)/*添加商品信息模块*/{int i=sum,j,flag=0;char choice;clrscr();printf("\n\n 添加一种新商品\n\n ");printf("\n-------------------------------------------------\n");do{goods[i].num= sum;printf("\n 新商品号:%d",goods[i].num);printf("\n 新商品名: ");scanf("%s",goods[i].name);printf("\n 新商品种类: ");scanf("%s",goods[i].kind);printf("\n 新商品数量: ");scanf("%d",&goods[i].amount);printf("\n 进价: ");scanf("%d",&goods[i].in_price);printf("\n 售价: ");scanf("%d",&goods[i].out_price);printf("\n 生产日期(yyyy-mm-dd): ");scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time. day);printf("\n 保质期: ");scanf("%d",&goods[i].save_day);i ;printf("\n\n 想继续添加商品吗?(Y/N)");fflush(stdin);choice=getch();if(choice=='y'||choice=='Y'){printf("继续");flag=1;}elseflag=0;}while(flag==1);printf("\n\n\n 按任意键返回主菜单.........");bioskey(0);}void Delete_Message(void)/*删除商品信息模块*/ {int i,j,numberkey,flag=0;char choice;printf("开始删除......\n\n");do{clrscr();printf("请输入你要删除的商品号: \n");scanf("%d",&numberkey);for(i=0;i<sum;i ){if(goods[i].num==numberkey){for(j=i;j<sum;j )goods[j]=goods[j 1];sum--;flag=1;printf("删除成功!!\n\n\n");break;}}if(flag==0){printf("不存在该商品信息!!!"); bioskey(0);}printf("\n\n是否继续输入(y/n)?\n");getchar();scanf("%c",&choice);}while(choice=='y'||choice=='Y');printf("\n按任意键返回");bioskey(0);}void Revise_Message(void)/*修改商品信息模块*/ {int i,j,flag,choice,revise_num;char ch;do{clrscr();printf("\n\n 开始修改...");printf("\n\n 请输入你想输入的商品号:\n");scanf("%d",&revise_num);for(i=0;i<sum;i ){if(goods[i].num==revise_num){printf("确定修改此商品信息吗?(y/n)");PRINT1;PRINT2;PRINT3;getchar();ch=getchar();if(ch='y'){printf("\n\n\n修改商品信息的哪一项?");printf("\n\n 1:商品名称");printf("\n\n 2:商品类型");printf("\n\n 3:销售价格");printf("\n\n 4:生产日期");printf("\n\n 5:保质期");printf("\n\n 请选择(0-5)\n");scanf("\n %d",&choice);switch(choice){case 1:printf("请输入修改后的商品名\n");scanf("%s",&goods[i].name);break;case 2:printf("请输入修改后的商品类型\n");scanf("%s",&goods[i].kind);break;case 3:printf("请输入修改后的商品销售价格\n"); scanf("%d",&goods[i].out_price);break; case 4:printf("请输入修改后的商品生产日期\n"); scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pro_time. day);break;case 5:printf("请输入修改后的商品保质期\n");scanf("%d",&goods[i].save_day);break;case 0:break;}printf("修改商品信息:\n");PRINT2;PRINT3;}elsebreak;}elsej ;if(j==sum)printf("不存在该商品信息..");}printf("\n\n 继续修改商品信息吗(y/n)?");getchar();ch=getchar();if(ch=='y'){printf("继续.\n");flag=1;}elseflag=0;}while(flag==1);printf("修改完成!!\n\n");getch();}void Renew_Message(void) /*更新商品信息模块*/{int choice;do{clrscr();printf("\n\n*********更新商品信息*********"); printf("\n\n 1:添加商品信息.\n\n");printf("\n\n 2:删除商品信息.\n\n");printf("\n\n 3:修改商品信息.\n\n");printf("\n\n 0:返回上一级.\n\n");printf("\n\n 请选择(0-3): ");scanf("%d",&choice);switch(choice)case 1:Insert_Message();break;case 2:Delete_Message();break;case 3:Revise_Message();break;case 0:break;}}while(choice!=0);}int Read_Message(void) /*读取信息模块*/{FILE *fp;int i=0;if((fp=fopen("999.txt","rb"))==NULL){printf("\n\t 现在还没有保存全部信息,按回车键回到主菜单输入商品信息!!");printf("\n\t 按任意键返回!!!!\n");getch();return;}while(feof(fp)!=1){fread(&goods[i],sizeof(struct goods_type),1,fp);if(goods[i].num==0)break;elsei ;}fclose(fp);return(i);}void Inquire_goodsname(void)/*按商品名称查询*/{int i,j,choice;char namekey[10];j=0;printf("开始查询...");printf("请输入你要查询的商品号:\n");scanf("%s",namekey);for(i=0;i<sum;i )if(strcmp(goods[i].name,namekey)==0&&goods[i].num!=0)printf(" ---商品信息----");PRINT1;PRINT2;PRINT3;}elsej ;if(j==sum)printf("该商品不存在!");printf("按任意键返回主菜单.");getch();}void Inquire_goodskind(void)/*按商品类型查询*/{int i,j,choice;char kindkey[10];j=0;printf("开始查询...");printf("请输入你要查询的商品种类:\n");scanf("%s",kindkey);for(i=0;i<sum;i )if(strcmp(goods[i].kind,kindkey)==0&&goods[i].num!=0) {printf(" ---商品信息----");PRINT1;PRINT2;PRINT3;}elsej ;if(j==sum)printf("该商品不存在!");printf("按任意键返回主菜单.");getch();}void Inquire_Message(void) /*查询模块*/{int choice;do{printf("\n *****查询商品信息 ***** \n");printf("\n *****1:按商品名称.***** \n");printf("\n *****2:按商品种类.***** \n");printf("\n *****0:返回上一级.***** \n");printf("\n 请选择(0-2): ***** \n");scanf("%d",&choice);switch(choice){case 1:Inquire_goodsname();break;case 2:Inquire_goodskind();break;case 0:break;}}while(choice!=0);}Save_Message(int sum) /*保存模块*/{FILE *fp;int i;if((fp=fopen("999.txt","wb"))==NULL){printf("\n\n不能打开文件!\n\n");exit();}for(i=0;i<=sum;i )if(fwrite(&goods[i],sizeof(struct goods_type),1,fp)!=1) printf("写文件出错!");fclose(fp);}void main(void) /*主函数*/{int choice;clrscr();sum=Read_Message();bioskey(0);do{clrscr();printf("***************************************************\n");printf(" ************ 超市商品管理系统**************\n");printf(" ************\n");printf(" ************\n");printf(" ************\n");printf(" ****** 欢迎登陆******\n");printf(" ************\n");printf(" ************\n");printf(" ************\n");printf("***************************************************\n");printf("***************************************************\n");getchar ();clrscr();printf(" ***************超市商品管理系统***********\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(" ***** 请选择(0-6): *****\n"); scanf("%d",&choice);switch(choice){case 1:Input_Message();break;case 2:Show_Message();break;case 3:Renew_Message();break;case 4:Inquire_Message();break;case 5:Count_Message();break;case 6:Sort_Message();break;case 0:break;}}while(choice!=0);Save_Message(sum);printf("\n-信息已经保存!-(file name:999.txt)\n");。
题目:超市商品管理院系:信息科技学院专业:通信工程姓名: XXX学号: 1251100XXX指导教师:杨永清日期: 2013年9月15日某某电子科技大学信息科技学院实训报告超市商品管理此题目设计目的是训练学生的根本编程能力,了解管理信息系统的开发流程,熟悉C 语言的文件和单链表的各种根本操作。
本程序中涉与结构体、单链表、文件等方面的知识。
通过本程序的训练,使学生能对C语言的文件操作有一个更深刻的了解,掌握利用单链表存储结构实现对学生成绩管理的原理,为进一步开发出高质量的管理信息系统打下坚实的根底。
1、程序简介本程序用VC++6.0编译,运行于windows系统下。
1.1、本程序应具有以下功能:1、文件操作功能文件操作:可建立、打开、保存、关闭数据文件。
如果是新建的文件,可输入商品信息数据:数据包括商品编号、商品名、商品类别、商品数量、商品价格等。
2、数据输入功能输入信息:输入商品编号、数量完成进货操作。
3、数据添加、修改、删除功能添加:添加一种或多种新商品,并能输入其商品信息。
修改:修改商品信息,可包括商品编号、名称、种类、数量和单价。
删除:删除一类或多类商品的所有信息。
4、计算功能可通过查询商品信息功能,自动计算并输出需要进货的商品信息。
通过商品数量与单价,自动计算出商品总价。
5、查询功能可分别按商品编号和需要进货的商品进展查询。
6、排序功能可分别按商品编号、金额等进展排序。
7、数据显示功能可分别浏览输入、查询和排序后的商品信息。
2、总体设计图采用模块化程序设计方法,将较大任务按一定规如此分成一些较小任务,各个模块之间既独立又相关。
主菜单输入界面:信息显示界面:2.2详细设计:〔以下为局部代码〕struct goods{int num;//编号char name[15];//名称double price;//单价double count;//数量double total;//总金额};struct goods m[50];//定义结构体数组结构体struct goods将用于存储商品的根本信息1、主函数main()定义主函数为空类型(void);利用选择结构(switch)实现在在主函数中的调用各个子函数。
超市管理系统c实现#include<stdio.h>#include<malloc.h>#include<string.h>typedef struct goods{char Name[10];char num[10];char prd_date[10];char sf_date[10];float price;char unit[20];char number[3];struct goods *next;}goods;void Lulu(int i,goods *t,goods *q);void shuchu(goods *t);void xiugai(char *ch,goods *t);void chaxun(char *ch,goods *t);void add(goods *t);void shanchu(goods *t);void main(){goods head,*p,*q;int i,t,m;char num[10];head.next=NULL;i=0;printf("1录入商品的信息\n");printf("请输入要录入商品的个数:\n");scanf("%d",&t);while(i<t){q=&head;p=(goods*)malloc(sizeof(goods));p->next=NULL;Lulu(i,p,q);while(q->next)q=q->next;q->next=p;i++;}printf("请选择您所需要的功能:\n");printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");scanf("%d",&m);while(m!=0){q=&head;if(m==2){while(q->next){q=q->next;shuchu(q);}printf("请选择您所需要的功能:\n"); printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");}if(m==3){printf("请输入要修改商品的编号:\n");scanf("%s",&num);xiugai(num,q);}if(m==4){printf("请输入要查询商品的编号:\n");scanf("%s",num);chaxun(num,q);}if(m==5){add(q);}if(m==6){shanchu(q);}scanf("%d",&m);}}void Lulu(int i,goods *t,goods *q){int flag;goods* l;printf("请输入第%d个商品的编号:\n",i+1);while(1){l=q;flag=0;scanf("%s",t->num);while(l){if(!strcmp(l->num,t->num)){printf("输入的编号已存在,请重新输入\n");flag=1;break;}l=l->next;}if(!flag) break;}printf("请输入第%d个商品的名称:\n",i+1);scanf("%s",t->Name);printf("请输入第%d个商品的生产日期:\n",i+1);scanf("%s",t->prd_date);printf("请输入第%d个商品的保质期:\n",i+1);scanf("%s",t->sf_date);printf("请输入第%d个商品的价格:\n",i+1);scanf("%f",&t->price);printf("请输入第%d个商品的单位:\n",i+1);scanf("%s",t->unit);printf("请输入第%d个商品的所属柜组:\n",i+1);scanf("%s",t->number);}void shuchu(goods *t){printf("商品的编号:%s\n",t->num);printf("商品的名称:%s\n",t->Name);printf("商品的生产日期:%s\n",t->prd_date);printf("商品的保质期:%s\n",t->sf_date);printf("商品的价格:%.2f元\n",t->price);printf("商品的单位:%s\n",t->unit);printf("商品所属柜组:%s\n",t->number);printf("\n\n");}void xiugai(char *ch,goods *t){int i,m,flag=1;t=t->next;while(t){if(strcmp(t->num,ch)==0){flag=0;break;}elset=t->next;}if(flag==1){printf("编号不存在,请选择0退出修改重新选择修改商品信息,重新输入编号");}while(1){printf("请选择要修改的商品的信息\n");printf("1修改商品的编号\n");printf("2修改商品的名称\n");printf("3.修改商品的价格\n");printf("4.修改商品的单位\n");printf("5.修改商品所属柜组\n");printf("输入0结束修改\n");scanf("%d",&m);i=m;if(i==1){printf("请输入商品的新编号:\n");scanf("%s",t->num);}if(i==2){printf("请输入商品的新名称:\n");scanf("%s",t->Name);}if(i==3){printf("请输入商品的新价格:\n");scanf("%f",&t->price);}if(i==4){printf("请输入商品的新单位:\n");scanf("%s",t->unit);}if(i==5){printf("请输入商品所属的新柜组:\n");scanf("%s",t->number);}if(i==0)break;}printf("请选择您所需要的功能:\n");printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");}void chaxun(char *ch,goods *t){int flag=1;t=t->next;while(t){if(strcmp(t->num,ch)==0){flag=0;break;}t=t->next;}if(flag==1){printf("编号不存在,重新输入编号");}elseshuchu(t);printf("请选择您所需要的功能:\n");printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");}void add(goods *t){goods *q,*p;int flag,word=1;q=(goods*)malloc(sizeof(goods));while(word){p=t;flag=0;printf("请输入要增加的商品的编号:\n");scanf("%s",q->num);while(p->next){if(strcmp(p->next->num,q->num)==0){flag=1;break;}p=p->next;}if(flag==1){printf("商品编号有重复,请重新输入商品的编号\n");continue;}elseword=0;printf("请输入商品的名称:\n");scanf("%s",q->Name);printf("请输入商品的生产日期:\n");scanf("%s",q->prd_date);printf("请输入商品的保质期:\n");scanf("%s",q->sf_date);printf("请输入商品的价格:\n");scanf("%f",&q->price);printf("请输入商品的单位:\n");scanf("%s",q->unit);printf("请输入商品所属柜组:\n");scanf("%s",q->number);}p=t;while(p->next){if(strcmp(p->next->num,t->num)>0)break;elsep=p->next;}q->next=p->next;p->next=q;printf("请选择您所需要的功能:\n");printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");}void shanchu(goods *p){goods *q,*t;char num[10];q=p;printf("请输入要删除的商品编号:\n");scanf("%s",num);while(q->next)if(strcmp(q->next->num,num)==0)break;else q=q->next;if(q->next){t=q->next;q->next=q->next->next;free(t);}elseprintf("没有该编号的商品");printf("请选择您所需要的功能:\n");printf("2查看所有商品\n");printf("3修改商品信息\n");printf("4查询信商品信息\n");printf("5增加新商品信息\n");printf("6删除商品信息\n");printf("0退出程序\n");}。
1题目描述 (1)2 系统分析 (1)2.1 题目要求 (1)2.2 输入/输出要求 (2)2.3 分析要处理的数据 (2)2.4 分析功能及其具体含义 (2)3 系统设计 (3)3.1 数据定义 (3)3.2 系统功能设计 (3)3.3 函数调用关系 (3)3.4 文件组织结构 (3)3.5设计过程的重点和难点设计过程的重点和难点 (4)4详细设计 (4)4.1流程图 (4)5 系统实现 (5)5.1源程序清单 (5)5.1.1 头文件 (5)5.1.2 主函数 (5)5.1.3 菜单 (10)5.2遇到的问题及解决 (11)5.3重点难点技术分析 (11)6 调试运行 (11)6.1测试和结果 (11)7 系统使用说明 (14)8 结论 (14)8.1课题完成情况说明 (14)8.2系统的亮点 (14)8.3系统的不足 (14)8.4系统可能的改进和扩展 (14)1题目描述假设某超市购物信息主要包括:会员编号,会员名,商品编号,商品名,商品价格,商品数量,商品日期等,本系统应能对这些基本信息进行管理,具有会员信息录入、查看、保存至文件、从文件中读出、增加购买信息,修改购买信息,删除购买信息,按商品项查询。
2 系统分析2.1 题目要求(1) 为各项操作功能设计一个菜单。
应用程序运行后,先显示这个菜单,然后用户通过菜单项选择希望进行的操作项目;(2) 会员购买信息按记录完整地录入、查看、保存至文件、从文件中读出、查看各会员购买信息、增加购买信息,修改购买信息,删除购买信息,按商品项查询。
(3) 要求以上功能分别用函数实现。
并要求用C语言的文件操作语句将以上所有结果保存在文件wuyao.c中。
2.2 输入/输出要求(1) 应用程序运行后,先显示一个菜单,然后用户根据需要选择相应的操作项目。
进入每个操作后,根据程序的提示输入相应的信息;(2) 要求用户输入数据时,要给出清晰、明确的提示信息,包括输入的数据内容、格式及结束方式等。
苏州科技学院二○一三~二○一四学年第一学期电子与信息工程系课程设计报告书课程名称:程序设计基础实践班级:学号:姓名:指导教师:二○一三年十二月1.题目《超市商品信息管理系统》的设计与实现2.功能(1)每一条记录包括一个商品的ID、名称、价格、保质日期。
(2)信息录入功能:可以完成信息记录的追加与插入。
(3)信息排序功能:按商品ID、商品价格进行排序。
(4)信息查询功能:完成按商品ID、商品名称查找商品记录,并显示。
(5)读取功能:将保存在文件中的商品记录读取出来。
(6)修改信息功能:按商品的ID进行读取未修改前的数据,输入新信息,保存。
(7)删除功能:按商品ID删除商品信息记录,并保存。
(8)退出:退出主菜单,退出程序。
3. 系统流程图4.设计内容整个系统除了主函数外,另外还有一三个函数,实现八大功能:录入功能(追加、插入)、显示功能、查询功能、排序功能、删除功能、保存功能、读取功能。
各个函数的详细设计说明分别如下:4.1主函数main()利用无限次循环while (select!='0')和swithch()实现各函数的调用,系统根据输入的数字选项来调用相应的函数。
4.2菜单选择函数void DisMainMenu();这是一个无参函数,主要实现“功能选择”的界面,在这个界面里有显示系统的七大功能,根据每个功能前面的序号进行选择。
等执行完每一个函数功能后,按任一键回到主界面也要通过这个函数来实现!4.3信息录入函数int InformationInput(GOODS goo[],int cn)这是一个含参函数,用来执行商品信息的追加、插入。
其中GOODS goo[]是结构体数组,cn是本次录入商品记录的总数。
信息录入函数的流程图如下:信息录入函数的程序如下:int InformationInput(GOODS goo[],int cn){int number,i,m,n,a1,j,a2=0;char a3;printf("\n请输入本次录入的商品品种的总数: ");scanf("%d",&number);if(number>MAX_NUM-cn){printf("您输入的人数太多,大于%d人!\n",MAX_NUM-cn);system("pause");return(0);}printf("\n****1. 信息的追加****\t****2.信息的插入****\n");scanf("%d",&m);if(m==1){for(i=cn;i<number+cn;i++){printf("\t商品ID :\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);for(j=0;j<i;j++){if(goo[j].ID==goo[i].ID || strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y / N ?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y')break;elsereturn(0);}elsecontinue;}printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].guarant.year,&goo[i].guarant.month,&goo[i].guarant.day);printf("\n");}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,cn,cn+number);printf("\n");return(number+cn);}else if(m==2){printf("该数据插入在商品ID ? 之前: ");scanf("%d",&n);for(i=0;i<cn;i++){if(goo[i].ID==n){a1=i;break;}elsecontinue;}if(i<=cn-1){for(i=cn-1;i>=a1;i--){goo[i+number].ID=goo[i].ID;strcpy(goo[i+number].name,goo[i].name);goo[i+number].price=goo[i].price;goo[i+number].guarant.year=goo[i].guarant.year;goo[i+number].guarant.month=goo[i].guarant.month;goo[i+number].guarant.day=goo[i].guarant.day;}for(i=a1;i<a1+number;i++){printf("\t商品ID :\t");scanf("%d",&goo[i].ID);printf("\t商品名称:\t");fflush(stdin);scanf("%s",goo[i].name);printf("\t商品单价:\t");scanf("%f",&goo[i].price);printf("\t商品保质日期:\t");scanf("%d%d%d",&goo[i].guarant.year,&goo[i].guarant.month,&goo[i].guarant.day);printf("\n");}for(i=a1;i<a1+number;i++){for(j=0;j<a1;j++){if(goo[j].ID==goo[i].ID || strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y / N ?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}for(j=a1+number;j<cn+number;j++){if(goo[j].ID==goo[i].ID || strcmp(goo[j].name,goo[i].name)==0){printf("\n警告:您输入的商品ID或商品名称与已有的数据文件相同,是否继续Y / N ?");fflush(stdin);scanf("%c",&a3);if(a3=='Y'||a3=='y'){break;break;}elsereturn(0);}elsecontinue;}}printf("\n本次输入的信息是:\n");DisplayInformation2(goo,a1,a1+number);printf("\n");return(number+cn);}else{printf("\n输入插入位置有误,请查询数据文件后重新插入!");system("pause");return(0);}}else{printf("输入错误!");return(0);}}4.4信息排序函数void Sort(GOODS goo[],int max);这是一个不返回值的有参函数,形参为max,负责对全部商品信息分别按商品ID、价格运用“冒泡法”进行升序排序。
#include <stdlib.h>#include <stdio.h>#include <string.h>//-------------------------------------------------------------//Max count of good,def 100 temporary//-------------------------------------------------------------#define MAX 100#define false -1#define true 1//声明一个计数器int CurrentCnt;//-------------------------------------------------------------//Good Information Definition//-------------------------------------------------------------struct GoodInfo {char good_id[30];char good_name[30];char good_price[10];char good_discount[10];int good_amount;int good_remain;};struct GoodInfo *Goods[MAX];//-------------------------------------------------------------//read a goodinfo from file//-------------------------------------------------------------struct GoodInfo *readGoodInfo(FILE* fp){struct GoodInfo *pGoodInfo = (struct GoodInfo*)malloc(sizeof(struct GoodInfo));//开辟空间fscanf(fp,"%s",&pGoodInfo->good_id);fscanf(fp,"\t%s",&pGoodInfo->good_name);fscanf(fp,"\t%s",&pGoodInfo->good_price);fscanf(fp,"\t%s",&pGoodInfo->good_discount);fscanf(fp,"\t%d",&pGoodInfo->good_amount);fscanf(fp,"\t%d\n",&pGoodInfo->good_remain);//将信息存入结构return pGoodInfo;}//-------------------------------------------------------------//check whether the file exists or not//-------------------------------------------------------------int check_nullfile(){FILE *fp = fopen("E:\\goodinfo.txt","r");//file not existif(!fp){printf("商品信息初始化文件不存在!\n请您放到E盘根目录!\n");FILE *fp = fopen("E:\goodinfo.txt","w");fclose(fp);}//file already existelse{int temp;//res for try to read file if file null feof() can't jarge if file is nullint res = fscanf(fp,"%d",&temp);fclose(fp);if(res<=0){printf("文件为空,请确保文件中存有商品信息\n");return false;}elsereturn true;}}//-------------------------------------------------------------//initialize//-------------------------------------------------------------void info_init(){int i;for(i=0; i<MAX; ++i){Goods[i] = NULL;}int res = check_nullfile();FILE *fp = fopen("E:\\goodinfo.txt","r");int j = 0;while( res && !feof(fp) ){Goods[j] = readGoodInfo(fp);j++;CurrentCnt++;}fclose(fp);}//-------------------------------------------------------------// search a goodinfo//-------------------------------------------------------------int info_search(){int i;char name[30];scanf("%s",&name);for(i=0;i<CurrentCnt;i++)//用循环历遍结构{if(Goods[i]==NULL)//跳过已被释放内存的空指针i++;if(strcmp(name,Goods[i]->good_name)==0)//若商品名与输入相同则返回下标return i;}if(i==CurrentCnt)//未找到商品return false;}//-------------------------------------------------------------//modify a goodinfo//-------------------------------------------------------------void info_change(int i){printf("输入新的商品信息(以换行区分信息条目):\n");scanf("%s",&Goods[i]->good_id);scanf("%s",&Goods[i]->good_name);scanf("%s",&Goods[i]->good_price);scanf("%s",&Goods[i]->good_discount);scanf("%d",&Goods[i]->good_amount);scanf("%d",&Goods[i]->good_remain);printf("修改商品信息成功!\n");}//-------------------------------------------------------------//delete a goodinfo//-------------------------------------------------------------void info_dele(int i){if(i!=false){free(Goods[i]);//释放空间Goods[i]=NULL;//指向空指针}printf("删除商品信息成功!\n");}//-------------------------------------------------------------//output//-------------------------------------------------------------void info_output(int i){printf("目前商品信息:\n");printf("商品id:%s商品名称:%s商品价格:%s\n",Goods[i]->good_id,Goods[i]->good_name,Goods[i]->good_price);printf("商品折扣:%s商品数量:%d商品余数:%d\n",Goods[i]->good_discount,Goods[i]->good_amount,Goods[i]->good_remain);}//-------------------------------------------------------------//insert one goodinfo//-------------------------------------------------------------void info_insert(){ //开辟空间struct GoodInfo *newgoods=(struct GoodInfo*)malloc(sizeof(struct GoodInfo));scanf("%s",&newgoods->good_id);scanf("\n%s",&newgoods->good_name);scanf("\n%s",&newgoods->good_price);scanf("\n%s",&newgoods->good_discount);scanf("\n%d",&newgoods->good_amount);scanf("\n%d",&newgoods->good_remain);Goods[CurrentCnt]=newgoods;CurrentCnt++;printf("商品信息插入完成!\n");}//-------------------------------------------------------------//write one goodinfo into file//-------------------------------------------------------------void writeGoodInfo(FILE* fp,struct GoodInfo* pGoodInfo) {fprintf(fp,"%s\t",pGoodInfo->good_id);fprintf(fp,"%s\t",pGoodInfo->good_name);fprintf(fp,"%s\t",pGoodInfo->good_price);fprintf(fp,"%s\t",pGoodInfo->good_discount);fprintf(fp,"%d\t",pGoodInfo->good_amount);fprintf(fp,"%d\n",pGoodInfo->good_remain);}//-------------------------------------------------------------//write all goodinfos into file//-------------------------------------------------------------void info_flush(){int i;FILE *fp = fopen("E:\\goodinfo.txt","w");for(i=0; i<MAX; ++i){if(Goods[i])writeGoodInfo(fp,Goods[i]);}fclose(fp);}//-------------------------------------------------------------//free goodinfo memory//-------------------------------------------------------------void freeGoodInfo(){int i;for(i=0;i<CurrentCnt;i++)free(Goods[i]);}//-------------------------------------------------------------//main entry//-------------------------------------------------------------int main(){int i;int choice;char name[30];info_init();for(;;){printf("超市商品管理系统\n""*****************************************\n""1.商品信息的修改:\n""2.删除某个商品信息:\n""3.查找商品信息:\n""4.插入某个商品信息\n""其他数字,退出系统\n""****************************************\n""请输入您的选择:");scanf("%d",&choice);switch(choice){case 1:printf("输入您要修改的商品名称:");i=info_search();if(i!=false)info_change(i);elseprintf("您要修改的商品不存在\n");break;case 2:printf("输入您要删除的商品名称:");i=info_search();if(i!=false)info_dele(i);elseprintf("您要删除的商品不存在\n");break;case 3:printf("输入你要查询的商品名称:");i=info_search();if(i!=false)info_output(i);elseprintf("您要查询的商品不存在\n");break;case 4:printf("输入你要插入的商品信息(以换行区分信息条目):\n");info_insert();break;default:break;}if(choice!=1&&choice!=2&&choice!=3&&choice!=4)break;}info_flush();//存盘freeGoodInfo();//释放内存return 0;}。