(1) 系统包含三类用户:管理员、店长、销售员。
(2) 向管理员提供以下功能:自身密码修改、其他用户添加删除、用户信息修
改、统计。商品信息添加、修改、删除、查找、统计。
(3) 向店长提供以下功能:登录、注销、自身密码修改、自身信息修改,商品
信息修改、商品信息设计,查看日报表、月报表、商品销售量报表、查找浏览器修改商品储备信息。
(4) 向销售员提供以下功能:商品浏览、查找、出售,查看自己本日报表、本
月报表。 [提示]
(1) 总体设计:整个服装销售系统可设计为管理员模块、店长模块、销售员模
块、商品模块等。 (2) 数据结构采用结构体。 二、结构图
根据需求分析,该程序中销售员应实现如下功能:商品浏览、商品查找、出售商品、销售记录、用户注销,具体结构图如下。
销售员 商品浏览 商品查找 出售商品 销售记录 用户注销
店长应实现如下功能:登录、注销、自身密码修改、自身信息修改,商品信息修改、商品信息设计,查看日报表、月报表、商品销售量报表、查找浏览器修改商品储备信息,具体结构图如下。
店长 商商销商密用品品售品码户员信 管理员需要实现如下功能:自身密码修改、其他用户添加删除、用户信息修改、统计。商品信息添加、修改、删除、查找、统计。具体结构图如下。
添加用管理员 删除用户 退出系注销账修改密码 商品统计 查找商品 删除商品 添加商品 统计用户
统 户
三、程序中典型的流程图分析
(一)添加模块
(1)分析:信息添加模块职工的基本信息包括:用户、商品基本信息,对它们输入后,要存进原文件,流程图如下。
开始 文件打开输入信息 将信息输出到磁输出错误信息 是否继调结束 用
(二)浏览模块
(1)分析:浏览功能首先需要查找信息是否存在,在查找时,因为磁盘文件无序,
所以采用直接查找的办法。在容错上有较好的能力,输错时系统会有提示,也会作出相应的反映。算法和以上的分程序有相同的优点。 [流程
开始 打开文件查找商品信是否查找输出商品信操作存盘 是否继输出错误信结束
(三)查询模块
(1)分析:基本信息的查询按查询方式:按商品的名称查询,可供选择的方式
比较丰富。但本程序只使用了一种。在查询小模块中采用了直接查找的方法,这主要是由于磁盘文件无序的缘故。程序在选择结构上采用了if和else的嵌套形式,看起来有点繁杂,没有用switch语句直观明了,这个地方可以改成更好的。
开始 文件打开 输出错误信查询方式 商品的名是否继结束
(四)删除模块
(1)分析:商品信息存放在磁盘中,程序须将该文件全部取出来,在内存中把要删
掉的内容除去,然后在重新输入到磁盘,这种算法比较合理,但有一点烦琐。可以改为另一种办法:设置一个标示符,对有这些标识符的记录在下次输入时跳过,在新商品信息输入时,将其覆盖就行了。在对文件进行删除时,考虑到很多方面,如:查询不到时系统该如何处理等。人性化设计有在删除之前询问是否继续。
[流程图]
开始 文件打开 查找商品信输出错误信是否查找删除操作 输入信息 是否继结束
五)修改模块
(1)分析:修改与删除程序相似,管理员信息存放在磁盘中,程序须将该文件全部
取出来,在内存中把要修改的内容修改,然后在重新输入到磁盘,这种算法比较合理,但有一点烦琐,可以改进。
开始 文件打开 查找职工信输出错误信是否查找修改操作 输入信息 是否继结束
四、题目分析
1、按照系统需要三类用户用它作为主函数:int main() {
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) {
int chose; int temp,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\if(chose<1||chose>5) {
printf(\" 你的选择出现错误!按任意键重新的进入选择菜
单!\\n\");
system(\"pause\");
continue;
}
switch(chose) { case 1: {
system(\"cls\"); if(userload(use)==1)
{ usermenu(use,dress); }
}
system(\"pause\"); break;
case 2:
{
system(\"cls\"); if(monload(use)==1)
{
monmenu(use,dress); }
}
break;
case 3:
{
system(\"cls\"); temp=adminload(adm); if(temp==1) {
system(\"pause\");
temp2=adminmenu(adm,use,dress); return 3; }
system(\"pause\"); }
3、当选择管理员的时候就用如下程序,注明(管理员的初始账号是admin,密码是123456)
int regnew(user *use)
}
continue;
default: exit(0); }
}//while()
{ char name[21]; char pass[7]={0}; int chose; int i,j; int type; while(1)
{
system(\"cls\");
printf(\" scanf(\"%s\
printf(\" for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); }
printf(\"\\n\\n 员 1,店长 \");
scanf(\"%d\ while(1)
{ printf(\"\\n\\n 1,确认 0,重新输入\\n\"); scanf(\"%d\
用户名:\"); 密 码:\"); 请输入用户的类型:0,销售用户注册信息入完毕,是否确认? if(chose!=1&&chose!=0)
{ printf(\" 你的输入有误,请重新的输入!\\n\");
continue; }
if(chose==1)
{ for(i=0;i else break; } } } \\n\"); int deluser(user *use) { int i; char name[20]; printf(\" 请输入你想要删除的用户的用户名:\"); scanf(\"%s\ for(i=0;i<200;i++) { if(strcmp(use[i].username,name)==0) { printf(\"\\n\\n\\n 用户 %s 删除成功!\\n\\n\\n\\n\ strcpy(use[i].username,\"unknown\"); use[i].flag=-1; return 1; } } printf(\" 用户 %s 不存在!请查正在次操作!\\n\\n\\n\\n\ return 0; } int useall(user *use) { int i; system(\"cls\"); printf(\" 销售人员:\\n\"); for(i=0;i<200;i++) { if(use[i].type==0) { if(use[i].flag==1) printf(\" 用户姓名: %s 用户密码: %s \\n\ } } printf(\" 店长:\\n\"); for(i=0;i<200;i++) { if(use[i].type==1) { if(use[i].flag==1) printf(\" \\n\ } } } int adminload(ADMIN *adm) { char name[21]; char pass[7]={0}; int chose,chose2; int i,j; while(1) { system(\"cls\"); 用户姓名:用户密码: %s %s printf(\" 管理员账号:\"); scanf(\"%s\ printf(\" 密 码:\"); for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); } while(1) { printf(\"\\n\\n 用户登陆信息输入完毕,是否确认? 1,确认 0,重新输入\\n\"); scanf(\"%d\ 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); return 1; } printf(\" 输入的用户名或者密码有误!1,重新登陆 2,退出登陆!\\n\"); scanf(\"%d\ if(chose2==1) { system(\"cls\"); break; } else { system(\"cls\"); return 0; } } if(chose==0) break; } } } int adminpass(ADMIN *adm) { int i; char pass[20]={0}; char pass2[20]={0}; while(1) { system(\"cls\"); printf(\" 请输入新的管理员密码:\"); for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); } printf(\"\\n\\n\\n 请再次输入新的管理员密码:\"); for(i=0;i<6;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\"); return 1; } } } int adminout() { int chose; while(1) { system(\"cls\"); printf(\" 你确定要注销吗? 1,注销 0,取消\\n\\n\"); scanf(\"%d\ if(chose!=0&&chose!=1) { printf(\" 你的选项出现了错误,请重新的输入!\\n\\n\\n\"); system(\"pasue\"); continue; } if(chose==1) { printf(\" 管理员账户注销完毕!! \\n\\n\\n\\n\"); system(\"pause\"); return 1; } else return 0; } } int out() { int chose; system(\"cls\"); printf(\" 真的要退出系统吗?退出后信息会全部的丢失!!1,退出 0,取消\"); scanf(\"%d\ if(chose==1)exit(0); else return 1; } int adminmenu(ADMIN *adm,user *use,DRESS *dress) { int chose1; while(1) { system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ printf(\" //=========//\\n\"); 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(\" // 0,退出系统 //\\n\"); printf(\" //=========================//\\n\"); printf(\"\\n /=============================请选择服务的种类 ========================/\\n\"); scanf(\"%d\ if(chose1<0||chose1>9) { printf(\" 你的输入有误,请重新的输入!\\n\"); system(\"pasue\"); continue; } switch(chose1) { case 1: { system(\"cls\"); } regnew(use); system(\"pause\"); break; case 2: { } system(\"cls\"); deluser(use); system(\"pause\"); break; case 3: { } system(\"cls\"); useall(use); system(\"pause\"); break; case 4: { system(\"cls\"); adddress(dress); system(\"pasue\"); } break; case 5: { } system(\"cls\"); deldress(dress); break; case 6: { } system(\"cls\"); finddress(dress); break; case 7: { system(\"cls\"); dressall(dress); system(\"pasue\"); } break; case 8: { system(\"cls\"); if(adminpass(adm)==1) continue; break; } case 9: { system(\"cls\"); if(adminout()==1) return 3; } case 0:{ system(\"cls\"); if(out()==1) continue; } break; default: continue; } } } int userload(user *use) { char name[21]; char pass[7]={0}; int chose,chose2; int i,j; while(1) { system(\"cls\"); printf(\" scanf(\"%s\ printf(\" for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); } while(1) { printf(\"\\n\\n 1,确认 0,重新输入\\n\"); 用户名:\"); 密 码:\"); 用户登陆信息输入完毕,是否确认? scanf(\"%d\ if(chose!=1&&chose!=0) { printf(\" 你的输入有误,请重新的输入!\\n\"); continue; } if(chose==1) { for(i=0;i<200;i++) { if(use[i].type==0) if(strcmp(use[i].username,name)==0) if(strcmp(use[i].pass,pass)==0) { printf(\" 登陆成功!请继续使用! \\n\"); strcpy(usertemp.username,name); return 1; } } printf(\" 输入的用户名或者密码有误!1,重新登陆 2,退出登陆!\\n\"); scanf(\"%d\ if(chose2==1) { system(\"cls\"); break; } else { system(\"cls\"); return 0; } } if(chose==0) break; } } } 这里面包含了管理员的十个功能选项。 4,选择销售员和店长,(注明第一次运行时本来没有销售员和店长,需要管理员添加。) int userout() { int chose; while(1) { system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ printf(\" 你确定要注销吗? 1,注销 0,取消\\n\\n\"); scanf(\"%d\ if(chose!=0&&chose!=1) { printf(\" 你的选项出现了错误,请重新的输入!\\n\\n\\n\"); system(\"pasue\"); continue; } if(chose==1) { printf(\" 销售员账户注销完毕!! \\n\\n\\n\\n\"); strcpy(usertemp.username,\"unknown\"); // system(\"pause\"); return 1; } else return 0; } } int sold(user *use,DRESS *dress) { char name[20]; int num; int i; int j; int k; system(\"cls\"); printf(\"\\n 线用户: %s\\n\\n\ printf(\" 请输入要出售的商品的名称:\"); scanf(\"%s\ printf(\"\\n 请输入出售的数量:\"); scanf(\"%d\ for(k=0;k<200;k++) { if(strcmp(use[k].username,usertemp.username)==0) for(i=0;i<500;i++) { if(strcmp(dress[i].name,name)==0) { if(dress[i].now printf(\"\\n\\n\\n 商品 %s已经销售出了 %d件\\n\ for(j=0;j<100;j++) { if(use[k].mdb[j].flag==0) { strcpy(use[k].mdb[j].name,name); use[k].mdb[j].flag=1; use[k].mdb[j].total=num; return 1; } } } } } printf(\" 商品出售出现错误!!请重新操作!\\n\\n\\n\"); return 0; } void mounth(user *use) { int i; int j; char name[20]; strcpy(name,usertemp.username); system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ for(i=0;i<100;i++) { if(strcmp(use[i].username,name)==0) { for(j=0;j<100;j++) { if(use[i].mdb[j].flag==1) printf(\" 商品名称: 量 : %d\\n\ } } } } int usermenu(user *use,DRESS *dress) { int i; int chose1; while(1) { system(\"cls\"); %s ,出售数 printf(\"\\n 在线用户: %s\\n\\n\ printf(\" //=======用户功能菜单=====//\\n\"); printf(\" //\\n\"); printf(\" // 1//\\n\"); printf(\" // 2//\\n\"); printf(\" // 3//\\n\"); printf(\" // 4//\\n\"); printf(\" // 5//\\n\"); printf(\" //\\n\"); printf(\" //\\n\"); printf(\" //=========================//\\n\"); ,商品浏览,商品查找,出售商品,销售记录,用户注销 // // // printf(\"\\n /=============================请选择服务的种类 ========================/\\n\"); scanf(\"%d\ if(chose1<0||chose1>9) { printf(\" \\n\"); system(\"pasue\"); continue; } switch(chose1) { case 1: { system(\"cls\"); dressall(dress); break; } case 2: { system(\"cls\"); finddress(dress); break; } 你的输入有误,请重新的输入! case 3: { system(\"cls\"); } sold(use,dress); system(\"pause\"); break; case 4: { system(\"cls\"); mounth(use); system(\"pause\"); } break; case 5: { system(\"cls\"); if(userout()==1) return 3; break; } default: continue; } } } int monpass(user *use) { int i; char pass[20]={0}; char pass2[20]={0}; while(1) { printf(\" 请输入新的密码:\"); for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); } printf(\"\\n\\n\\n 请再次输入新的密码:\"); for(i=0;i<6;i++) { pass2[i]=getch(); printf(\"*\"); } if(strcmp(pass,pass2)!=0) { printf(\"\\n\\n 两次输入的新的密码不一样,请重新的输入!\\n\\n\\n\"); system(\"pause\"); } else { printf(\"\\n 密码修改成功!下一次登陆请使用新的密码!\\n\\n\\n\"); for(i=0;i<200;i++) { if(strcmp(use[i].username,usertemp.username)==0) { strcpy(use[i].pass,pass); system(\"pause\"); } } return 1; } } } void monsee(user *use) { int i; int j; char name[20]; system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ for(i=0;i<100;i++) { if(use[i].flag==1&&use[i].type==0) { printf(\"销售员姓名: %s\\n\ for(j=0;j<100;j++) { if(use[i].mdb[j].flag==1) printf(\" 商品名称: %s ,量 : %d\\n\ } } } } int monload(user *use) { char name[21]; char pass[7]={0}; int chose,chose2; int i,j; while(1) 售数出 { system(\"cls\"); printf(\" 用户名:\"); scanf(\"%s\ printf(\" for(i=0;i<6;i++) { pass[i]=getch(); printf(\"*\"); } while(1) { printf(\"\\n\\n 1,确认 0,重新输入\\n\"); scanf(\"%d\ if(chose!=1&&chose!=0) { printf(\" 入!\\n\"); continue; } if(chose==1) { 密 码:\"); 用户登陆信息输入完毕,是否确认? 你的输入有误,请重新的输 for(i=0;i<200;i++) { if(use[i].type==1) if(strcmp(use[i].username,name)==0) if(strcmp(use[i].pass,pass)==0) { printf(\" 登陆成功!请继续使用! \\n\"); strcpy(usertemp.username,name); return 1; } } printf(\" 输入的用户名或者密码有误!1,重新登陆 2,退出登陆!\\n\"); scanf(\"%d\ if(chose2==1) { system(\"cls\"); break; } else { system(\"cls\"); return 0; } } if(chose==0) break; } } } int monout() { int chose; while(1) { system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ printf(\" 你确定要注销吗? 1,注销 0,取消\\n\\n\"); scanf(\"%d\ if(chose!=0&&chose!=1) { printf(\" 你的选项出现了错误,请重新的输 入!\\n\\n\\n\"); system(\"pasue\"); continue; } if(chose==1) { printf(\" 店长账户注销完毕!! \\n\\n\\n\\n\"); strcpy(usertemp.username,\"unknown\"); return 1; } else return 0; } } int fix(DRESS *dress) { char name[20],name2[20]; int total; int now; int i; system(\"cls\"); printf(\"\\n 在 线用户: %s\\n\\n\ printf(\" 请输入需要修改信息的商品的名称:\"); scanf(\"%s\ for(i=0;i<500;i++) { if(strcmp(dress[i].name,name)==0) { printf(\"商品信息:\\n 名称: %s,现存: %d,总共: %d\\n\ printf(\"\\n\\n 请输入修改以后的商品的名称:\"); scanf(\"%s\ printf(\"\\n\\n 请输入修改以后的商品的现存:\"); scanf(\"%d\ printf(\"\\n\\n 请输入修改以后的商品的总共:\"); scanf(\"%d\ strcpy(dress[i].name,name2); dress[i].now=now; dress[i].total=total; printf(\"\\n\\n\"); printf(\"修改以后的商品信息:\\n 名称: %s,现存: %d,总共: %d\\n\ return 1; } } printf(\" 修改信息失败!请查正以后重新的操作!!\\n\\n\\n\"); return 0; } int monmenu(user *use,DRESS *dress) { int i; int chose1; while(1) { system(\"cls\"); printf(\"\\n 在线用户: %s\\n\\n\ printf(\" //=========//\\n\"); printf(\" //\\n\"); printf(\" // 1//\\n\"); printf(\" // 2//\\n\"); ===用户功能菜单 // ,商品浏览,商品查找 printf(\" // 3,销售员业绩 //\\n\"); printf(\" // 4,商品信息修改 //\\n\"); printf(\" // 5,密码修改 //\\n\"); printf(\" // 6,用户注销 //\\n\"); printf(\" // //\\n\"); printf(\" //=========================//\\n\"); printf(\"\\n /=============================请选择服务的种类 ========================/\\n\"); scanf(\"%d\ if(chose1<1||chose1>8) { printf(\" 你的输入有误,请重新的输入!\\n\"); system(\"pasue\"); continue; } switch(chose1) { case 1: { system(\"cls\"); } dressall(dress); break; case 2: { system(\"cls\"); } finddress(dress); break; case 3: { system(\"cls\"); } monsee(use); system(\"pause\"); break; case 4: { system(\"cls\"); fix(dress); system(\"pause\"); } break; case 5: { } system(\"cls\"); monpass(use); break; case 6: { system(\"cls\"); if(monout()==1) return 3; break; } default: continue; } } } 五、程序截图 1、运行程序时出现的图象: 2、由于程序事先没有设置店长和销售员的帐号,所以要先选择3、管理员登陆,会出现如下图: 注明:管理员初始帐号admin密码是123456 3、进入后会出现如下的图象: 以上是管理员的功能,店长和销售员的帐号要通过添加用户来增加。 4、选择添加用户后会出现: 以上可以选择注册两种类型的人员。 5、统计用户会出现已经注册的人: 6、还有一系列的东西不一一贴出,推出时点注销帐户,然后用注册的帐号可以进入其他人员的功能表,下面列举销售人员的功能: 这些是销售员的功能,实现这些功能之前,首先要管理员注册商品信息。其他的不一一列举。 六、总结 在老师的带领下进行了C语言程序实践学习。在短短一周的实习期间使我获取了不少新知识也巩固了许多老知识。基本掌握了简单程序的编写方法和编程的基本流程,掌握了模块设计方法,能理解和运用简单结构化程序设计的思想和方法,掌握和提高利用C语言进行程序设计的能力。 C语言是需要有一定基础、而且动手能力强的学科。上机实验是学习程序设计语言必不可少的实践环节,特别是C语言灵活、简洁,更需要通过编程的实践来真正掌握它。对于程序设计语言的学习目的,可以概括为学习语法规定、巩固贯穿系统知识、掌握程序设计方法、提高程序设计能力。 这一周的实习是我们把理论与实践结合的一次尝试,通过对这题的学习与理解,将很繁琐的问题慢慢捋清思路,进一步理解和运用结构化程序设计的思想和方法。初步掌握开发一个小型实用系统的基本方法,学会调试一个比较长程序的基本方法,学会利用流程图表示算法,进一步掌握和提高利用C语言进行程序设计的能力。 最后,谢谢老师悉心指导。 课程设计评语 对课程论文的评语: 平时成绩: 总 成 绩: 课程论文成绩: 评阅人签名: 因篇幅问题不能全部显示,请点此查看更多更全内容