一、【题目】:服装销售系统【要求】(1)系统包含三类用户:管理员、店长、销售员。(2)向管理员提供以下功能:自身密码修改、其他用户添加删除、用户信息修改、统计。商品信息添加、修改、删除、查找、统计。(3)向店长提供以下功能:登录、注销、自身密码修改、自身信息修改,商品信息修改、商品信息设计,查看日报表、月报表、商品销售量报表、查找浏览器修改商品储备信息。(4)向销售员提供以下功能:商品浏览、查找、出售,查看自己本日报表、本月报表。[提示](1)总体设计:整个服装销售系统可设计为管理员模块、店长模块、销售员模块、商品模块等。(2)数据结构采用结构体。二、结构图根据需求分析,该程序中销售员应实现如下功能:商品浏览、商品查找、出售商品、销售记录、用户注销,具体结构图如下。店长应实现如下功能:登录、注销、自身密码修改、自身信息修改,商品信息修改、商品信息设计,查看日报表、月报表、商品销售量报表、查找浏览器修改商品储备信息,具体结构图如下。销售员商品浏览商品查找出售商品销售记录用户注销管理员需要实现如下功能:自身密码修改、其他用户添加删除、用户信息修改、统计。商品信息添加、修改、删除、查找、统计。具体结构图如下。三、程序中典型的流程图分析(一)添加模块(1)分析:信息添加模块职工的基本信息包括:用户、商品基本信息,对它们输入后,要存进原文件,流程图如下。店长商品浏览商品查找销售员业绩商品信息修改密码修改用户注销管理员删除用户退出系统注销账户修改密码商品统计查找商品删除商品添加商品统计用户添加用户(二)浏览模块(1)分析:浏览功能首先需要查找信息是否存在,在查找时,因为磁盘文件无序,所以采用直接查找的办法。在容错上有较好的能力,输错时系统会有提示,也会作出相应的反映。算法和以上的分程序有相同的优点。[流程开始打开文件否输出错误信息查找商品信息是否查找到输出商品信息操作存盘是否继续结束文件打开否输入信息是否继续将信息输出到磁盘调用printf_back()函数结束开始输出错误信息(三)查询模块(1)分析:基本信息的查询按查询方式:按商品的名称查询,可供选择的方式比较丰富。但本程序只使用了一种。在查询小模块中采用了直接查找的方法,这主要是由于磁盘文件无序的缘故。程序在选择结构上采用了if和else的嵌套形式,看起来有点繁杂,没有用switch语句直观明了,这个地方可以改成更好的。(四)删除模块(1)分析:商品信息存放在磁盘中,程序须将该文件全部取出来,在内存中把要删掉的内容除去,然后在重新输入到磁盘,这种算法比较合理,但有一点烦琐。可以改为另一种办法:设置一个标示符,对有这些标识符的记录在下次输入时跳过,在新商品信息输入时,将其覆盖就行了。在对文件进行删除时,考虑到很多方面,如:查询不到时系统该如何处理等。人性化设计有在删除之前询问是否继续。[流程图]开始文件打开查询方式是否继续结束输出错误信息商品的名称五)修改模块(1)分析:修改与删除程序相似,管理员信息存放在磁盘中,程序须将该文件全部取出来,在内存中把要修改的内容修改,然后在重新输入到磁盘,这种算法比较合理,但有一点烦琐,可以改进。开始文件打开查找职工信息是否查找到输入信息是否继续结束输出错误信息修改操作开始文件打开查找商品信息是否查找到输入信息是否继续结束输出错误信息删除操作四、题目分析1、按照系统需要三类用户用它作为主函数:intmain(){user*use;DRESS*dress;ADMIN*adm;use=(user*)malloc(200*sizeof(user));userIntiate(use);adm=(ADMIN*)malloc(sizeof(ADMIN));adminIntiate(adm);dress=(DRESS*)malloc(500*sizeof(DRESS));dressIntiate(dress);while(1){if(first(use,adm,dress)==3)continue;}}2、三类用户的选择登陆为int*first(user*use,ADMIN*adm,DRESS*dress){intchose;inttemp,temp2;while(1){system(cls);printf(//=========功能菜单========//\n);printf(////\n);printf(////\n);printf(//1,销售员登陆//\n);printf(//2,店长登陆//\n);printf(//3,管理员登陆//\n);printf(////\n);printf(//=========================//\n);printf(\n/=============================请选择服务的种类========================/\n);scanf(%d,&chose);if(chose1||chose5){printf(你的选择出现错误!按任意键重新的进入选择菜单!\n);system(pause);continue;}switch(chose){case1:{system(cls);if(userload(use)==1){usermenu(use,dress);}system(pause);break;}case2:{system(cls);if(monload(use)==1){monmenu(use,dress);}break;}case3:{system(cls);temp=adminload(adm);if(temp==1){system(pause);temp2=adminmenu(adm,use,dress);return3;}system(pause);continue;}default:exit(0);}}//while()}3、当选择管理员的时候就用如下程序,注明(管理员的初始账号是admin,密码是123456)intregnew(user*use){charname[21];charpass[7]={0};intchose;inti,j;inttype;while(1){system(cls);printf(用户名:);scanf(%s,&name);printf(密码:);for(i=0;i6;i++){pass[i]=getch();printf(*);}printf(\n\n请输入用户的类型:0,销售员1,店长);scanf(%d,&type);while(1){printf(\n\n用户注册信息入完毕,是否确认?1,确认0,重新输入\n);scanf(%d,&chose);if(chose!=1&&chose!=0){printf(你的输入有误,请重新的输入!\n);continue;}if(chose==1){for(i=0;iusernum+1;i++)if(use[i].flag==0){printf(注册成功!请继续使用!\n);strcpy(use[i].username,name);strcpy(use[i].pass,pass);usernum++;use[i].flag=1;use[i].type=type;return1;}}elsebreak;}}}intdeluser(user*use){inti;charname[20];printf(请输入你想要删除的用户的用户名:);scanf(%s,name);for(i=0;i200;i++){if(strcmp(use[i].username,name)==0){printf(\n\n\n用户%s删除成功!\n\n\n\n,name);strcpy(use[i].username,unknown);use[i].flag=-1;return1;}}printf(用户%s不存在!请查正在次操作!\n\n\n\n,name);return0;}intuseall(user*use){inti;system(cls);printf(销售人员:\n);for(i=0;i200;i++){if(use[i].type==0){if(use[i].flag==1)printf(用户姓名:%s用户密码:%s\n,use[i].username,use[i].pass);}}printf(店长:\n);for(i=0;i200;i++){if(use[i].type==1){if(use[i].flag==1)printf(用户姓名:%s用户密码:%s\n,use[i].username,use[i].pass);}}}intadminload(ADMIN*adm){charname[21];charpass[7]={0};intchose,chose2;inti,j;while(1){system(cls);printf(管理员账号:);scanf(%s,&name);printf(密码:);for(i=0;i6;i++){pass[i]=getch();printf(*);}while(1){printf(\n\n用户登陆信息输入完毕,是否确认?1,确认0,重新输入\n);scanf(%d,&chose);if(chose!=1&&chose!=0){printf(你的输入有误,请重新的输入!\n);continue;}if(chose==1){if(strcmp(adm-name,name)==0)if(strcmp(adm-pass,pass)==0){printf(登陆成功!请继续使用!\n);strcpy(usertemp.username,name);return1;}printf(输入的用户名或者密码有误!1,重新登陆2,退出登陆!\n);scanf(%d,&chose2);if(chose2==1){system(cls);break;}else{system(cls);return0;}}if(chose==0)break;}}}intadminpass(ADMIN*adm){inti;charpass[20]={0};charpass2[20]={0};while(1){system(cls);printf(请输入新的管理员密码:);for(i=0;i6;i++){pass[i]=getch();printf(*);}printf(\n\n\n请再次输入新的管理员密码:);for(i=0;i6;i++){pass2[i]=getch();printf(*);}if(strcmp(pass,pass2)!=0){printf(\n\n两次输入的新的密码不一样,请重新的输入!\n\n\n);system(pause);}else{printf(\n密码修改成功!下一次管理员登陆请使用新的密码!\n\n\n);strcpy(adm-pass,pass);system(pause);return1;}}}intadminout(){intchose;while(1){system(cls);printf(你确定要注销吗?1,注销0,取消\n\n);scanf(%d,&chose);if(chose!=0&&chose!=1){printf(你的选项出现了错误,请重新的输入!\n\n\n);system(pasue);continue;}if(chose==1){printf(管理员账户注销完毕!!\n\n\n\n);system(pause);return1;}elsereturn0;}}intout(){intchose;system(cls);printf(真的要退出系统吗?退出后信息会全部的丢失!!1,退出0,取消);scanf(%d,&chose);if(chose==1)exit(0);elsereturn1;}intadminmenu(ADMIN*adm,user*use,DRESS*dress){intchose1;while(1){sy