黔南民族师范学院软件设计课程设计报告题目超市商品管理系统系部名称:计科系专业名称:信息管理与信息系统班级:学号:B12计信班1208045139学生姓名:胡崇祯指导教师:黄茹时间:2013年11月9日至2013年12月8日、课程设计目的1. 通过本课程设计,强化上机动手能力,使学生在理论和实践的基础上进一步巩固《 C 语言程序设计》课程学习的内容,掌握工程软件设计的基本方法。
2. 学会将知识应用于实际的方法,提高分析和解决问题的能力,增加综合能力。
3. 为后续各门计算机课程的学习打下坚实基础。
4. 为毕业设计和以后工作打下必要基础。
、课程设计内容1. 编写程序并进行调试运行。
2. 输入商品信息,并保存于文件。
每个商品信息包含信息如:库存量、进价、售价、保质期、生产商等。
3. 对已存入的商品信息进行更新操作,包括添加一个商品信息、删除某个商品信息和修改某个商品信息。
4. 通过输入商品名、商品号、商品类型的方式查询商品信息。
5. 最后输出商品信息,供需要时打印。
、需求分析1. 该程序可用于对商品基本信息的存储、更新、查询、排序、输出等操作,以实现对商品信息的管理。
2. 其中更新功能包括:添加信息、删除信息、修改信息、可根据需要添加一个或多个商品信息,也可对个别商品信息进行适当的删除或修改。
以便随时更新商品信息。
3. 程序中设计的查询功能可根据需要从若干数据中查询某个商品信息,并且可根据三种不同的方法查询:按商品号查询、按商品类型和按商品查询,以满足不同的需要。
四、概要设计1、方案设计对系统进行分析,给出结构图分析:系统要求实现许多的功能,因此遵循结构化程序设计思想来进行本系统的设计—自顶向下、逐步细化,将系统设计任务分解出许多子功能模块进行设计结构图如下:2、模块功能说明(对各个模块进行功能的描述)(1) .输入模块:录入需要管理的商品信息并将信息保存于文件中,以方便日后进行打印、读取、更新等操作。
(2) .添加模块:可添加一个或多个商品信息,并将所添加商品信息保存, 方便查找。
(3) .删除模块:可对售完的商品信息做删除处理。
(4) •修改模块:可根据需要对多个商品信息进行修改,也可随时对个别项进行修改。
(5) •查询模块:可对已建立的商品信息进行查询,并且可根据需要选择按商品名查询或按商品号查询。
(6) .保存模块:用于对信息进行保存。
(7) .输出模块:将所有商品信息或想要查询的商品信息显示于屏幕,用于打印商品信息或查找某些商品信息。
(8) .退出系统:选择该项,自动退出该系统五、详细设计及运行结果保存数据结束输入模块: 输出模块: 排行模块:六、调试情况,设计技巧及体会1、对自己设计进行评价,指出合理和不足之处,提出改进的方案。
此次实践课编写的是一个应用程序,相对于以前我们见到的程序,它要大得多,开始时,数据的输出格式不太规范,而且各模块也出现了一些小问题,在老师和同学的帮助下,通过自己一次又一次的进行调试和修改,最后运行的结果基本上达到了预期的目的。
由于时间问题和考虑得不够周全,可能在某些功能上不是很完善,不过已有的功能已能基本满足一般用户的需求,如果能通过不断的实验和使用过程中所积累的问题进行改进。
如:数量,价格的输入值为负值时,程序也能继续执行,这就给运用上带来一些不便或可能出现一些莫名其妙的错误。
不过总的来说,对于自己首次能够自主完成一个这样大的程序来说,还是比较满意。
2、在设计过程中的感受。
本次C语言的实习课让我对C语言的学习又有了更深入的了解,也让我更深刻地领悟到了“实践出真理”这个道理,在上机实践过程中学到的知识远远超过了在课堂上十几周学到的,学校组织的这次实习让我们这些实践知识较缺乏的大学生增添了许多实践经验,为我们将来走上工作岗位其了不小的铺垫作用。
本次实习中遇到了很多以前没有遇到过的问题,也曾想过要放弃,但看到自己一般写过的大量程序,给了我继续的信心。
在老师和同学的帮助下,我顺利的完成了本次实习,让我体会到了经过不懈的努力,有过挫折有过坎坷,但最终实现目标后的成就感,也让我充分感受到友谊和团结的重要性。
七、参考文献《C语言程序设计》王曙燕曹锰八、附录:#in elude <stdio.h>#in elude <math.h>#in elude <stri ng.h>#i ncludevc on io.h>#in elude<stdio.h>#i ncludevstri ng.h>#defi ne MAX 20#defi ne PRINT1 printf(" ------------------------------------------------------- \n")#define PRINT2 printf("商品号--商品名称--商品种类--销售价格--生产日期 (年-月-日)--保质期\n")#defi ne PRINT3printf("%4d%8s%8s%8d%8d-%2d-%2d%4d\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].save_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); voidRevise_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 ******* printf(" printf(" printf("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 排名 商品号 商品名称 商品类别 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++){商品信息排行 ********\n\n"); 1:按库存量排行 \n\n");0:返回主菜单 \n\n"); 请选择 (0-1): "); 库存量 \n\n");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%8d%8d",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 %8d%8d\n",&goods[i].num,&profit); }else j++; if(j==sum)printf("\n 该商品不存在 !!!"); printf("\n 按任意键返回主菜单 !!");bioskey(0);}void Count_Message(void) /*统计模块 */{int choice; do{clrscr(); switch(choice)printf(" f **************统计商品信息 *************\n\n\n");printf("******* 1: 统计库存量printf("******* 2: 统计利润printf("******* 0: 返回主菜单printf("******* 请选择 (0-2):scanf("%d",&choice); ************\n\n\n"); ************\n\n\n"); ************\n\n\n"); ************\n\n\n");{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_ti me.day);printf("\n 保质期: ");scanf ("%d",&goods[i].save_day);printf("继续输入信息,y or斤??");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].pr o_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:pri ntf("请输入修改后的商品生产日期\n");scanf("%d-%d-%d",&goods[i].pro_time.year,&goods[i].pro_time.month,&goods[i].pr o_time.day);break;case 5:printf("请输入修改后的商品保质期\n");scanf("%d",&goods[i].save_day);break;case 0:break;}printf(" 修改商品信息:\n");PRINT2;PRINT3; }elsebreak;}else j++;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;} else j++;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;} else j++;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; case2: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("**************************************************松 «H\ ・printf(" ************超市商品管理系统**************\n");printf(" ****** ******\n");printf(" ****** ******\n");printf(" ****** ******\n");printf(" ****** 欢迎登陆******\n");printf(" ****** ******\n");printf(" ******printf("*************************************************printf("************************************************* getchar (); clrscr();*****\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);**\n");printf(" ********\n");**\n");**\n");printf("**************************\n\n");printf("***** *****\n\n");printf("***** *****\n\n");printf("***** *****\n\n");printf("***** *****\n\n");printf("***** *****\n\n");printf("**********\n\n");printf("***** 1: 输 入 商 品 信 息丿2:输 出 商 品 信息丿Li 3:更 新 商 品 信息丿Li 4:查 询 商 品 信息丿Li5: 统 计 商 品 信 息 6:商 品 信 息 排 序0:退 出 系 统*****\n\n");printf(" *****超市商品管理系统 请 选 择 (0-6):Save_Message(sum);printf("\n- 信息已经保存!-(file name:999.txt)\n");。