小型商品管理系统-课程设计说明书.doc
.C语言课程设计课程设计报告小型商品管理系统班级:11104112:永贤学号:1110411231辅导教师:戴蒙2012.06.25-2012.07.06目录0 题目和31 设计目的62 功能描述73 总体设计83.1 功能模块设计83.2 数据结构设计93.3 函数功能描述104 程序实现114.1 源码分析114.2 运行结果225课程设计总结28题目一 小型商品管理系统 1. 设计要求(1)基本功能:a) 创建商品价格信息文件b) 增加商品价格信息c) 删除商品价格信息d) 修改商品价格信息e) 查询商品价格f) 商品价格排行浏览(2)拓展功能:a) 管理员对用户的管理(权限管理):增加、删除、修改、查询用户信息b) 用户验证(3)创新(自拟)功能:程序实现的其它功能由个人自拟。2. 设计要求具体说明a)基本功能:(1)创建商品价格信息文件:提示具有管理员权限的用户输入保存商品价格信息记录的文件名,在磁盘上创建该文件。用户根据提示输入商品的序号、名称、各项价格要素,如价格、折扣和会员价。可一次性输入多条商品的价格信息记录。系统将商品价格信息记录存储在系统磁盘的文件中,以便进行管理、查找和备份。 (2)增加商品价格信息:在原有商品价格信息文件的基础上增加新的商品价格信息记录,并继续保存至磁盘。 (3)删除商品价格信息:提示输入要进行删除操作的商品序号,如果在文件中有该商品的价格信息存在,则将该序号所对应的名称、序号、各种价格要素等在对应文件中加以删除,并提示顾客选择是否继续进行删除操作。 (4)修改商品价格信息:提示用户输入要进行修改操作的商品序号,如果在文件中有该商品的价格信息存在,则提示顾客输入要修改的选项,并将结果存储于文件。提示用户是否需要继续修改。 (5)查询商品价格:分为根据商品名称和商品序号两种查询方式,分别提示客户输入要查询商品信息的序号或名称,如果在磁盘文件中有对应得商品价格信息,则提示用户已找到,并逐项列出对应商品的价格状况。在该功能中,也需提示用户是否需要继续查找,如不再继续查询,则返回主界面。(6)商品价格排行浏览:根据商品的折扣价格进行排行,以便用户对商品价格状况有较为直观方便的了解。b)拓展功能: (1)管理员对用户的管理:管理员对用户进行创建、增加、删除、修改和浏览。管理员创建的用户登录信息存储在磁盘文件中,每当有用户登录系统时,系统根据该文件中的用户名和密码进行核实判断。 (2)用户验证:用户在使用系统治前要进行登录验证。提示输入用户名和密码。并根据其权限提供不同操作界面。如未能通过验证则提示用户重新登录,超过三次则强制退出系统。客户登录到系统后允许使用的系统功能和用户权限有关,普通用户只能进行查询和浏览,具有管理员权限的用户则可进行对商品信息的增、删、改和用户登录信息的管理。小型商品管理系统1 用户登录2 商品信息管理3 权限管理图1.程序的主界面1 设计目的本课程设计是计算机科学与技术专业重要的实践性环节之一,是在学生学习完C程序设计语言现代算法课程后进行的一次全面的综合练习。本课程设计的目的和任务:1. 巩固和加深学生对C语言课程的基本知识的理解和掌握; 2. 掌握C语言编程和程序调试的基本技能; 3. 利用C语言进行基本的软件设计; 4. 掌握书写程序设计说明文档的能力 5. 提高运用C语言解决实际问题的能力。2 功能描述本程序主要是对小型商品的基础操作基本功能:a) 创建商品价格信息文件b) 增加商品价格信息c) 删除商品价格信息d) 修改商品价格信息e) 查询商品价格f) 商品价格排行浏览拓展功能:a) 管理员对用户的管理(权限管理):增加、删除、修改、查询用户信息b) 用户验证创新(自拟)功能:程序实现的其它功能由个人自拟。3 总体设计3.1 功能模块设计主要结构、开始主界面选择操作执行操作返回选择界面退出图2.程序主要结构图3.2 数据结构设计开始商品信息管理主界面权限管理用户登录函数6函数5函数4函数3函数2函数1选择操作选择操作退出输入错误用户验证管理员验证图3.程序流程图函数1:创建商品价格信息文件由主函数跳转到该函数后(1) 提示管理员输入商品名和价格,存储在结构体中。(2) 提示管理员是否继续添加,若继续添加,则循环该函数,若选择不再添加,则跳出该函数。函数2:增加商品价格信息由主函数跳转到该函数后(1)检测是否有商品,若没有商品,则提示管理员先创建商品价格信息;若有商品,则统计有多少个商品,然后提示用户输入新的商品名和价格。(2)将输入信息存储在结构体中,提示管理员是否继续添加。(3)若继续添加,则循环该函数,若选择不再添加,则跳出该函数。函数3:删除商品价格信息由主函数跳转到该函数后(1)提示管理员是选择性删除还是全部清空,并检测输入的容是否符合要求,若符合要求,则执行相应操作;若不符合,则重新运行该函数。(2)若选择的是全部清空,则直接删除所有容;若选择的是选择性删除,提示管理员输入要删除的商品名,并存储在字符串中。(3)检测是否有所输入的商品名,若没有,则提示没有该商品;若有该商品,则将对应结构体的值清空,将其后的有商品的容全部前移一位,将最后前移的容原来的结构体值清空。跳出函数。函数4:修改商品价格信息由主函数跳转到该函数后(1)提示管理员输入要删除的商品名并存储在字符串中。(2)用strcmp(str1,str2)搜索输入的商品,若有,则提示管理员输入新的商品名和价格,代替原来的容;若没有该商品,则提示输入错误。(3)跳出函数。函数5:查询商品价格由主函数跳转到该函数后(1)提示管理员或用户输入要查询的商品名并存储在字符串中。(2)用strcmp(str1,str2)搜索输入的商品,若有,则显示商品价格;若没有该商品,则提示输入错误。 (3)跳出函数。函数6:商品价格排行浏览由主函数跳转到该函数后(1)提示管理员或用户输选择想要的排序方式(按价格升序或降序)。(2)检测输入是否正确,若不正确,则重新提示,直至输入容符合要求。(3)分别用两个for循环进行相应排序。(4)按要求输出排序后容3.3 函数功能描述1输入函数1)函数原形:scanf(“%d”,&*)2) 功 能: scanf()函数利用取地址符号&完成对程序中某个变量的赋值,进而程序中判断循环的功能。2.输出函数1)函数原型:printf(“”, );2) 功 能:printf( )用于在屏幕上输出容.3.跳转函数1)函数原型:goto 标识符;2)用于无条件跳转4.选择函数1)函数原型:if()else,for(; ; ),switch()case :break;case :break;default:break;2) 功 能:按条件进行选择。5.自定义函数1)函数:(1)void establish(struct lable *p);(2)void add(struct lable *p);(3)void dele(struct lable *p);(4)void alter(struct lable *p);(5)void search(struct lable *p);(6)void chars(struct lable *p);2) 功 能:执行自定义的功能。4 程序实现4.1 源码分析/*小型商品管理系统/作者:永贤/2012-6-28*/*管理员口令为:999999/用户口令:888888*/#include <stdio.h>#include <conio.h>#include <string.h>struct lablechar name20;int price; a1000;void establish(struct lable *p);void add(struct lable *p);void dele(struct lable *p);void alter(struct lable *p);void search(struct lable *p);void chars(struct lable *p); int main(void)int K,M=100,N,X,Y,Z;/*start是用来显示主界面并提示输入对应字符选择操作*/start:printf(" *nn");printf(" * 小型商品管理系统 *nn");printf(" * 1.用户登录 *nn"); printf(" * 2.商品信息管理 *nn"); printf(" * 3.权限管理 *nn");printf(" * 0.退出 *nn");printf(" *nn");printf("请输入对应首字符选择你要的操作!n");scanf("%d",&M);if(M!=0&&M!=1&&M!=2&&M!=3|M=100)/*这个if语句用来检验输入的字符是否正确*/printf("Error!n输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;/*跳转到对应语句*/*这个级联式if语句用来验证用户口令并选择执行相应的操作*/if(M=0)goto exit;/*跳转到对应语句*/else if(M=1)printf("请输入用户口令:");scanf("%d",&X);if(X!=888888)printf("Error!n口令错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;/*跳转到对应语句*/ user:printf(" *nn");printf(" * 5) 查询商品价格 *nn");printf(" * 6) 商品价格排行浏览 *nn");printf(" * 0) 退出 *nn");printf(" *nn");printf("请输入对应首字符选择你要的操作!n");scanf("%d",&N);if(N!=5&&N!=6&&N!=0)/*这个if语句用来检验输入的字符是否正确*/printf("Error!n输入错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto user;/*跳转到对应语句*/ else if(M=2) printf("请输入管理员口令:");scanf("%d",&Y);if(Y!=999999)/*这个if语句用来检验输入的字符是否正确*/printf("Error!n口令错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;/*跳转到对应语句*/ manager:printf(" *nn");printf(" * 1) 创建商品价格信息文件 *nn");printf(" * 2) 增加商品价格信息 *nn");printf(" * 3) 删除商品价格信息 *nn");printf(" * 4) 修改商品价格信息 *nn");printf(" * 5) 查询商品价格 *nn");printf(" * 6) 商品价格排行浏览 *nn");printf(" * 7)返回主界面 *nn");printf(" * 0) 退出 *nn");printf(" *nn");printf("请输入对应首字符选择你要的操作!n");scanf("%d",&N);if(N>7|N<0)printf("Error!n输入错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto manager;/*跳转到对应语句*/ else if(M=3)printf("请输入管理员口令:");scanf("%d",&K);if(K!=999999)/*这个if语句用来检验输入的字符是否正确*/printf("Error!n口令错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;/*跳转到对应语句*/printf("是否取消权限?n是:请输入1n否:请输入0n");scanf("%d",&Z);if(Z!=0&&Z!=1)printf("Error!输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;/*跳转到对应语句*/if(Z=1)printf(" *nn");printf(" * 1) 创建商品价格信息文件 *nn");printf(" * 2) 增加商品价格信息 *nn");printf(" * 3) 删除商品价格信息 *nn");printf(" * 4) 修改商品价格信息 *nn");printf(" * 5) 查询商品价格 *nn");printf(" * 6) 商品价格排行浏览 *nn");printf(" * 7)返回主界面 *nn");printf(" * 0) 退出 *nn");printf(" *nn");printf("请输入对应首字符选择你要的操作!n");scanf("%d",&N);if(N>7|N<0)/*这个if语句用来检验输入的字符是否正确*/printf("Error!n输入错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto manager;/*跳转到对应语句*/ else if(Z=0)goto start;/*跳转到对应语句*/*用switch语句选择要执行的操作,跳转到最后的函数*/switch(N)case 1:establish(a);goto manager;/*跳转到对应语句*/break;case 2:add(a);goto manager;/*跳转到对应语句*/break;case 3:dele(a);goto manager;/*跳转到对应语句*/break;case 4:alter(a);goto manager;/*跳转到对应语句*/break;case 5:search(a);if(M=1)goto user;/*跳转到对应语句*/else if(M=2)goto manager;/*跳转到对应语句*/break;case 6:chars(a);if(M=1)goto user;/*跳转到对应语句*/else if(M=2)goto manager;/*跳转到对应语句*/break;case 0:/*执行退出*/exit:printf(" *n");printf(" * *n");printf(" * 惠顾! *n");printf(" * 欢迎你的下次光临! *n");printf(" * *n");printf(" *n");break;default:printf("Error!n");break;return 0;/*这个函数用来新建商品的价格信息*/void establish(struct lable *p)int i=0,j;do/*对商品名和价格进行记录*/printf("goods%dn",i+1);printf("name:");scanf("%s",pi.name);printf("price(¥):");scanf("%d",&pi.price);i+=1;est:/*选择是否继续添加*/j=100;printf("是否继续添加?n是,请输入1n否,请输入0n");scanf("%d",&j);if(j!=0&&j!=1)printf("Error!n输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto est;while(j=1);printf("共创建商品价格信息%d个n",i);/*这个函数用来添加商品的价格信息*/void add(struct lable *p)int i,j;if(p0.price=0)/*判断是否有商品*/printf("还没有任何商品!n请先建立商品信息!n"); elsefor(i=1;pi.price!=0;i+)/*统计已有商品数*/*添加商品*/doprintf("goods%dn",i+1);printf("name:");scanf("%s",&pi);printf("price(¥):");scanf("%d",&pi.price);i+=1;ad:printf("是否继续添加?n是,请输入1n否,请输入0n");scanf("%d",&j);if(j!=0&j!=1)/*判断输入是否正确*/printf("Error!n输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto ad;while(j=1);printf("共创建商品价格信息%d个n",i);/*这个函数用来删除商品的价格信息*/void dele(struct lable *p)int i,j=-1,X=-1;char str20;del:printf("请选择是全部清空还是选择性删除!n清空,请输入:0n选择性删除,请输入1n");scanf("%d",&j);/*按对应方式删除商品*/if(j!=0&&j!=1)/*判断输入是否正确*/printf("Error!输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto del;if(j=0)for(i=0;pi.price!=0;i+)strcpy(pi.name, "0");/*把字符串数组清空*/pi.price=0;printf("商品信息已清空!n");else if(j=1)printf("请输入你要删除的商品名称:");scanf("%s",str);for(i=0;pi.price!=0;i+)if(strcmp(pi.name,str)=0)/*比较两个字符串是否相等。*/printf("商品%s已删除!n",str);X=i;for(i=X;pi+1.price!=0;i+)if(X=-1)printf("搜索的商品不存在!n");break;pi.name=pi+1.name;pi.price=pi+1.price;strcpy(pi+1.name, "0");/*把字符串数组清空*/pi+1.price=0;/*这个函数用来改变商品的价格信息*/void alter(struct lable *p)char str20,i,j=0;printf("请输入你要修改的商品名:");scanf("%s",str);/*选择商品进行修改*/for(i=0;pi.price!=0;i+)if(strcmp(pi.name,str)=0)/*判断两个字符串是否相等*/printf("goods%dn",i+1);printf("name:");scanf("%s",pi.name);printf("price(¥):");scanf("%d",&pi.price);j=1;if(j=0)printf("你搜索的商品不存在!n");/*这个函数用来查看商品的价格信息*/void search(struct lable *p)char str20,i,j=0,N;if(p0.price=0)/*判断是否有商品*/printf("没有任何商品!n");elseprintf("请输入你要查询价格的商品名:");scanf("%s",str);for(i=0;pi.price!=0;i+)/*对商品进行搜索*/if(strcmp(pi.name,str)=0)/*比较两个字符串是否相等。*/ printf("price(¥):%dn",pi.price);j=1;if(j=0)printf("你搜索的商品不存在!n");/*这个函数用来按商品的价格进行排序*/void chars(struct lable *p)int i,j,t=-1,min,max;char str20;cha:/*选择排序方式*/printf("请选择排序方式!n按升序排列请输入:0n按降序排列请输入:1n");getch();/*等待你按下任意键,再继续执行下面的语句!*/scanf("%d",&t);if(t!=0&&t!=1)printf("Error!n输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto cha;if(t=0)/*按价格升序排列*/printf("按价格升序排列n");min=p0.price;for(i=0;pi.price!=0;i+)for(j=i+1;pj.price!=0;j+)if(pj.price<=pi.price)min=pj.price,pj.price=pi.price,pi.price=min;strcpy(str,pj.name);/*将后面的字符数组赋值给前面的字符数组*/ strcpy(pj.name,pi.name);strcpy(pi.name,str);else/*按价格降序排列*/printf("按价格降序排列n");max=p0.price;for(i=0;pi.price!=0;i+)for(j=i+1;pj.price!=0;j+)if(pj.price>=pi.price)max=pj.price,pj.price=pi.price,pi.price=max;strcpy(str,pj.name);/*将后面的字符数组赋值给前面的字符数组*/ strcpy(pj.name,pi.name);strcpy(pi.name,str);if(p0.price=0)printf("没有任何商品!n");else/*输出商品信息*/printf("*n");for(i=0;pi.price!=0;i+)printf("goods%dn",i+1);printf("name:%-20st",pi.name);printf("price:%dn",pi.price);printf("*n");4.2 运行结果1. 2. 3. 4.5. 6. 7. 5课程设计总结本程序在做的过程中有许多错误,但在我的努力及同学的帮助下都被一一克服,现在操作本程序时可根据提示进行相关操作,能正确输出结果。在刚开始的几次调试中曾经出现过不能运行、经过多次调试,这些问题得到克服,并且使程序的功能也得到了一定的完善。在这次设计过程中,不仅复习课本上所学知识,还通过上网查资料、问同学学到了课本上没有的知识。从而启发我,要想写好程序,在学好课本知识的同时还需要多读和专业有关的一些书籍,同时还需要多动脑子,尽量把所学的知识综合起来应用,力争写出完美的程序。除此之外,我还得到了一些有用的教训:写程序时必须要细心,不能输错一个字符标点。在修改时要有耐心,编译出错后必须逐个错误去改正,绝不能心急浮躁,否则修改之后还会有新的错误。1、 致能够完成这次课程设计必须感C语言课程老师戴蒙(是她教会了我C语言这门课程)、何哲同学。参考文献1C程序设计语言现代算法2 .baidu.附件:源代码:/*小型商品管理系统/作者:永贤/2012-6-28*/*管理员口令为:999999/用户口令:888888*/#include <stdio.h>#include <conio.h>#include <string.h>struct lablechar name20;int price; a1000;void establish(struct lable *p);void add(struct lable *p);void dele(struct lable *p);void alter(struct lable *p);void search(struct lable *p);void chars(struct lable *p); int main(void)int K,M=100,N,X,Y,Z;start:printf(" *nn");printf(" * 小型商品管理系统 *nn");printf(" * 1.用户登录 *nn"); printf(" * 2.商品信息管理 *nn"); printf(" * 3.权限管理 *nn");printf(" * 0.退出 *nn");printf(" *nn");printf("请输入对应首字符选择你要的操作!n");scanf("%d",&M);if(M!=0&&M!=1&&M!=2&&M!=3|M=100)printf("Error!n输入有误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start;if(M=0)goto exit;else if(M=1)printf("请输入用户口令:");scanf("%d",&X);if(X!=888888)printf("Error!n口令错误!n");getch();/*等待你按下任意键,再继续执行下面的语句!*/goto start; user:printf(" *