中 国 地 质 大 学
课程设计评语
对课程论文的评语:
平时成绩: 总 成 绩:
课程论文成绩: 评阅人签名: 注:1、无评阅人签名成绩无效;
2、必须用钢笔或圆珠笔批阅,用铅笔阅卷无效;
3、如有平时成绩,必须在上面评分表中标出,并计算入总成绩。
目 录
课程设计评语 .................................................................. 2 目 录 ......................................................................... 3 1. 课程论文题目 ............................................................ 4 2.程序设计思路 ............................................................... 4 3.功能模块图 ................................................................. 4 4.数据结构设计 ............................................................... 5 5.算法设计 ................................................................... 6 6.程序代码 .................................................................. 11 7.程序运行结果 .............................................................. 22 8.编程中遇到的困难及解决方法 ................................................ 28 9.总结心得及良好建议 ........................................................ 28 10.致谢 ..................................................................... 29
1. 课程论文题目
服装销售系统
(1)包含三类用户:管理员,店长,销售员。 (2)向管理员提供以下功能:自身密码修改,其他用户添加删除,用户信息修改,统计。商品信息添加,修改,删除,查找,统计。 (3)向店长提供以下功能:登陆,注销,自身密码修改,自身信息修改。商品信息修改商品信息统计。查看日报表,月报表,商品销量报表,营业员业绩报表,查找浏览修改商品储备信息。 (4)向销售员提供以下功能:商品浏览,查找,出售商品,查看自己的本日报表,本月报表。 [提示] (1)总体设计 整个服装销售系统可以设计为管理员模块,店长模块,销售员模块,商品模块等。 (2)数据结构采用结构体
(老师给我的题目要求是设计好店长模块,实现店长模块的功能,则下面的设计只涉及到店长模块。)
2.程序设计思路
根据题目要求,店长模块的功能是登陆、注销、密码、信息修改、商品储备信息修改、商品储备信息浏览、商品信息修改、商品信息统计。店长的名字及密码以文本文件的方式存于shop文件中。
3.功能模块图
店长
登注自商商查查查查浏修返陆 销 身品品看看看看览改回 信信信日月商营商商上
息息息报报品业品品一密修统表 表 销员储储菜码改 计 售业备备单 修量绩 信信改 表 息 息 4.数据结构设计
结构体:
输入数据
合法 N Y
店退
长 出
输入数据
N 合法 Y 登注自商商查查查查浏修返 陆 销 身品品看看看看览改回 信信信日月商营商商上
息息息报报品业品品一
密修统表 表 销员储储菜
码改 计 售业备备单
修 量绩 信信 改 表 息 息
继续运行 Y N 继续 结束 Y
5.算法设计
(1)主函数的流程图
开始 输出菜单供用户选输入菜单编号 N 判断编号是否为1.2 Y 根据编号调用各功能模块函数 结束
(2)店长模块中登录功能的流程图
检查是否已登录 N Y 提示已登录并返输入用户名和密码 N 是否找到 提示用户名不存在并返Y 回上一菜单 回上一菜单 提示登录成功并返回上一菜单
(3)店长模块的查看日(月)报表功能流程图
N 是否已登录 Y 返回上一菜单 输入要查询的日(月)N 是否找到 提示没有找到并返回上一菜单 Y 输出报表内容
(4)店长模块的商品(储备)信息修改功能
N 是否已登录 Y 输入需要修改的商品名 N 提示货物不存在是否找到 并返回上一菜单 Y 返回上一菜单 输入新的货品信息 N 信息是否合法 返回上一菜单 Y 提示修改成功并返回上一菜单
(5)店长模块的注销功能流程图
是否已登录 N Y 提示没有登录并返回上一菜单 提示注销成功并返回上一菜单
(5)店长模块的商品(储备)信息统计功能流程图
N 是否已登录 返回上一菜单 Y 输出所有商品信息
(7)店长模块的销售量报表查看功能流程图
N 是否已登录 返回上一菜单 Y 输出销售量报表
(8)店长模块的营业员业绩查看功能流程图
N 是否已登录 返回上一菜单 Y 输入营业员名字 N 是否找到 返回上一菜单 Y 输出销售量报表
(9)店长模块的主函数流程图
开始 输出菜单供用户选输入菜单编号 N 判断编号是否为1-11 Y 根据编号调用各功能模块函数 结束
6.程序代码
#include /*********************主函数 ***********************/ void shop(); void shop2(); void menu() { int n,w; do { puts(\"\\ ***********************************************\\n\"); puts(\"\\ + 1.店长 +\\n\"); puts(\"\\ + 2.退出 +\\n\"); puts(\"\\ ***********************************************\\n\"); printf(\"\\n\\n\\ Choice your number(1-2): [ ]\\b\\b\"); scanf(\"%d\ if(n<1||n>2) w=1; else w=0; } while(w==1); switch(n) { case 1:shop();break; case 2:exit(0); } } main() { menu(); } /************************店长模块**************************/ /***********登陆**************/ void shop_login(char name[],int *in) { char pass[100],name2[100],pass2[100]; if(*in==1)printf(\"你已经登陆!\\n\"); else { printf(\"请输入用户名,密码:\"); scanf(\"%s%s\ FILE *p; int x=0; p=fopen(\"shop.txt\ while(!feof(p)) { fscanf(p,\"%s%s\ if(strcmp(name,name2)==0) { x=1; if(strcmp(pass,pass2)==0)x=2; } } fclose(p); if(x==0)printf(\"该用户名不存在!\\n\"); else if(x==1)printf(\"密码错误!\\n\"); else if(x==2) { printf(\"登陆成功!\\n\"); *in=1; } shop2(); } printf(\"press any key to back.......\\n\");getchar();getchar(); } /**********注销*************/ void shop_logout(int *in) { if(*in==0)printf(\"你没有登陆。不需要注销!\\n\"); else if(*in==1) { *in=0; printf(\"注销成功!\\n\"); } printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /**************密码、信息修改****************/ void shop_change(char name1[],int *in) { if(*in==0)printf(\"你没有登陆,请首先登陆\\n\"); else { typedef struct sh { char name[10]; char password[100]; struct sh *next; }SHOP; FILE *p; SHOP *head,*a,*b; head=(SHOP *)malloc(sizeof(SHOP)); a=head; p=fopen(\"shop.txt\ while(!feof(p)) { b=(SHOP *)malloc(sizeof(SHOP)); fscanf(p,\"%s%s\ a->next=b; a=a->next; } a->next=NULL; fclose(p); a=head->next; while(a!=NULL) { if(strcmp(a->name,name1)==0) { printf(\"请输入修改后的店长姓名和密码:\"); scanf(\"%s%s\ break; } a=a->next; } a=head->next; p=fopen(\"shop.txt\ while(a->next!=NULL) { fprintf(p,\"%s %s\\n\ a=a->next; } fclose(p); printf(\"修改成功!\\n\"); free(head); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } } /***********商品信息修改************/ void shop_goodschange() { typedef struct g { char name[10]; double price; long num; struct g *next; }GOODS; FILE *p; GOODS *head,*a,*b; char na[10]; int k=0; head=(GOODS *)malloc(sizeof(GOODS)); a=head; p=fopen(\"goods.txt\ while(!feof(p)) { b=(GOODS *)malloc(sizeof(GOODS)); fscanf(p,\"%s%lf%d\ a->next=b; a=a->next; } a->next=NULL; fclose(p); printf(\"请输入要修改的货物的名称:\"); scanf(\"%s\ a=head->next; while(a!=NULL) { if(strcmp(a->name,na)==0) { printf(\"请输入新的货物名称,价格,数量:\"); scanf(\"%s%lf%d\ k=1; break; } a=a->next; } a=head->next; if(k==1) { p=fopen(\"goods.txt\ while(a->next!=NULL) { fprintf(p,\"%s %.2lf %d\\n\ a=a->next; } fclose(p); printf(\"修改成功!\\n\"); } else printf(\"该货物不存在!\\n\"); free(head); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /***********商品信息统计************/ void shop_goodscount() { FILE *p; int n=0; char name[10]; float k; int num; printf(\" 物品 价格 数量\\n\"); p=fopen(\"goods.txt\ while(!feof(p)) { fscanf(p,\"%s%f%d\ if(!feof(p)){printf(\"%s %.2f %d\\n\ } printf(\"There are %d kinds of goods.\\n\ fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /*************察看日报表************/ void daysells() { char date2[10]; int k=0,n; char name[10],price[10],seller[10],date[10]; printf(\"请输入要查询的年月日YYYYMMDD:\"); scanf(\"%s\ FILE *p; p=fopen(\"sells.txt\ printf(\"货物名 价格 售货员 日期 数量\\n\"); while(!feof(p)) { fscanf(p,\"%s%s%s%s%d\ if(strcmp(date,date2)==0&&!feof(p)) {printf(\"%s %s %s %s %d\\n\ } printf(\"There are %d sold on %s.\\n\ fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /************察看月报表*************/ void monthsells() { char date2[10]; int n=0,m; char name[10],price[10],seller[10],date[10]; int k,i; printf(\"请输入要查询的年月YYYYMM:\"); scanf(\"%s\ FILE *p; p=fopen(\"sells.txt\ printf(\"货物名 价格 售货员 日期 数量\\n\"); while(!feof(p)) { k=1; fscanf(p,\"%s%s%s%s%d\ for(i=0;i<6;i++) if(date[i]!=date2[i]) { k=0; break; } if(k==1&&!feof(p)) {printf(\"%s %s %s %s %d\\n\ } printf(\"There are %d sold in %s.\\n\ fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /*************察看销售量报表************/ void goodssells() { FILE *p;int n; char name[100],price[100],seller[100],date[10]; p=fopen(\"sells.txt\ printf(\"货物名 价格 售货员 日期 数量\\n\"); while(!feof(p)) { fscanf(p,\"%s%s%s%s%d\ if(!feof(p))printf(\"%s %s %s %s %d\\n\ } fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /***********察看营业员业绩表**********/ void pepsells() { char seller2[10]; int k=0,n; char name[10],price[10],seller[10],date[10]; printf(\"请输入要查询的售货员姓名:\"); scanf(\"%s\ FILE *p; p=fopen(\"sells.txt\ printf(\"货物名 价格 售货员 日期 数量\\n\"); while(!feof(p)) { fscanf(p,\"%s%s%s%s%d\ if(strcmp(seller,seller2)==0&&!feof(p)) { printf(\"%s %s %s %s %d\\n\ } printf(\"There are %d sold by the %s.\\n\ fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /***********商品储备信息浏览************/ void shop_goodsbrowse() { FILE *p; int n=0; char name[10]; float k; int num; printf(\" 物品 价格 数量\\n\"); p=fopen(\"goods.txt\ while(!feof(p)) { fscanf(p,\"%s%f%d\ if(!feof(p)){printf(\"%s %.2f %d\\n\ } fclose(p); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /***********商品储备信息修改************/ void shop_goods_change() { typedef struct g { char name[10]; double price; long num; struct g *next; }GOODS; FILE *p; GOODS *head,*a,*b; char na[10]; int k=0; head=(GOODS *)malloc(sizeof(GOODS)); a=head; p=fopen(\"goods.txt\ while(!feof(p)) { b=(GOODS *)malloc(sizeof(GOODS)); fscanf(p,\"%s%lf%d\ a->next=b; a=a->next; } a->next=NULL; fclose(p); printf(\"请输入要修改的货物的名称:\"); scanf(\"%s\ a=head->next; while(a!=NULL) { if(strcmp(a->name,na)==0) { printf(\"请输入新的货物名称,价格,数量:\"); scanf(\"%s%lf%d\ k=1; break; } a=a->next; } a=head->next; if(k==1) { p=fopen(\"goods.txt\ while(a->next!=NULL) { fprintf(p,\"%s %.2lf %d\\n\ a=a->next; } fclose(p); printf(\"修改成功!\\n\"); } else printf(\"该货物不存在!\\n\"); free(head); printf(\"press any key to back........\\n\"); getchar();getchar();shop2(); } /******************** 店长模块主函数********************/ void shop() { char name[100]; int n,in=0,w; do { printf(\" ***********************************************\\n\"); printf(\" 1,登陆\\n\"); printf(\" 2,注销\\n\"); printf(\" 3,自身信息,密码修改\\n\"); printf(\" 4,商品信息修改\\n\"); printf(\" 5,商品信息统计\\n\"); printf(\" 6,察看日报表\\n\"); printf(\" 7,察看月报表\\n\"); printf(\" 8,察看商品销售量报表\\n\"); printf(\" 9,察看营业员业绩报表\\n\"); printf(\" 10,浏览商品储备信息\\n\"); printf(\" 11,修改商品储备信息\\n\"); printf(\" 12,返回上一菜单\\n\"); printf(\" ***********************************************\\n\"); printf(\" Choice your number(1-12) [ ]\\b\\b\\b\"); scanf(\"%d\ if(n>12||n<1) { printf(\"\\n输入错误!请重新输入:\"); w=1;} else w=0; } while(w); if(n==12) menu(); switch(n) { case 1:shop_login(name,&in);break; case 2:shop_logout(&in);break; case 3:shop_change(name,&in);break; case 4: if(in==1)shop_goodschange(); else printf(\"请先登陆\\n\"); break; case 5:shop_goodscount();break; case 6:daysells();break; case 7:monthsells();break; case 8:goodssells();break; case 9:pepsells();break; case 10:shop_goodsbrowse();break; case 11:shop_goods_change();break; case 12:menu();break; } } /******************** 店长模块第二主函数********************/ void shop2() { char name[100]; int n,in=1,w; do { printf(\" ***********************************************\\n\"); printf(\" 1,登陆\\n\"); printf(\" 2,注销\\n\"); printf(\" 3,自身信息,密码修改\\n\"); printf(\" 4,商品信息修改\\n\"); printf(\" 5,商品信息统计\\n\"); printf(\" 6,察看日报表\\n\"); printf(\" 7,察看月报表\\n\"); printf(\" 8,察看商品销售量报表\\n\"); printf(\" 9,察看营业员业绩报表\\n\"); printf(\" 10,浏览商品储备信息\\n\"); printf(\" 11,修改商品储备信息\\n\"); printf(\" 12,返回上一菜单\\n\"); printf(\" ***********************************************\\n\"); printf(\" Choice your number(1-12) [ ]\\b\\b\\b\"); scanf(\"%d\ if(n>12||n<1) { printf(\"\\n输入错误!请重新输入:\"); w=1;} else w=0; } while(w); if(n==12) menu(); switch(n) { case 1:shop_login(name,&in);break; case 2:shop_logout(&in);break; case 3:shop_change(name,&in);break; case 4: if(in==1)shop_goodschange(); else printf(\"请先登陆\\n\"); break; case 5:shop_goodscount();break; case 6:daysells();break; case 7:monthsells();break; case 8:goodssells();break; case 9:pepsells();break; case 10:shop_goodscount();break; case 11:shop_goodschange();break; case 12:menu();break; } } 7.程序运行结果 主函数: 店长模块: 登陆: 注销: 商品信息修改: 商品信息统计: 查看日报表: 查看月报表: 查看商品销售量报表: 查看营业员业绩报表: 浏览商品储备信息: 修改商品储备信息: 返回上一菜单: 8.编程中遇到的困难及解决方法 在设计店长模块的过程中,我遇到的最大难题就是无法实现预想的先登录再进行下一步操作。最开始写好了子模块,但登陆完后就会直接退出程序。后来我在登陆的子模块最后调用shop函数,能够回到店长的主菜单但其他的所有操作都不能实现,即系统无法记录“已登录”这一状态。经检查后发现主函数里面定义了in=0,但已登录的情况下in=1,即只要回到shop函数,就会回到未登录的状态。在这种情况下,我添加了一个“第二主模块”,在这个模块里,除了定义in=1以外,其他的均与主函数相同。则进入店长模块以后,首先运行的是主函数,选择登陆后,再调用第二主模块,即可以实现先登录再进行后续操作了。虽然这种方法可能很笨拙,但是非常管用,虽然程序会加长但很简单。 9.总结心得及良好建议 通过本次课程设计深刻认识到C程序具有如下优点: vc语言功能丰富、表达能力强、使用灵活方便、应用面广、目标效率高、可移植性好,既具有高级语言的许多优点,又具有低级语言的许多特点,因此特别适合于编写系统软件。vc语言之所以能存在和发展,并具有较强的生命力,总是有其于其他语言的特点vc语言的主要特点如下: 1. 语言简洁,紧凑,使用方便,灵活。 2. 运算符丰富。 3. 数据类型丰富,具有现代语言的各种数据结构。 4. 具有结构化的控制语句。 5. 语法限制不太严格,程序设计自由度大。 6. vc语言允许直接访问物理地址,能进行位操作,能实现汇编语言的大部分功能,可以直接对硬件进行操作。 7. 生成目标代码质量高,程序执行效率高。 8. 用vc语言编写的程序可移植性好(与汇编语言相比)。 在本次课程设计中,通过与老师交流,学到了许多关于调试程序和检查错误的技巧。 (1)先进行人工检查。在写好一个程序后,不应匆匆上机,而应对纸面上的程序进行人工检查。这一步非常重要,可以发现由于疏漏而造成的多出错误。 (2)人工检查后,进行上机调试,根据提示信息具体找出程序中的错误,有时提示的出错行并不是真正出错的行,如果本行找不到,则到上一行寻找。如果系统错误过多,应从上到下逐一更正,可能仅有少数关键性错误。 (3)运行结果不对,大都为逻辑错误,仔细推敲或审查代码,进而排出错误。 10.致谢 感谢邵玉祥老师在C语言课程设计的过程中给予我的帮助。老师教授的知识及方法我将会牢记在心。老师是一个风趣幽默又有责任心的人,真心感谢老师的教诲。 因篇幅问题不能全部显示,请点此查看更多更全内容