资源描述
吉 首 大 学
JISHOU UNIVERSITY
《程序设计基础》课程设计
报 告 书
题 目 销售人员管理系统
作 者 陈 结 马少仁
刘慧惠 胡金欢
所属学院 软件服务外包学院
专业年级 软件工程2012级
指导老师 黄 云 职称
写作时间 2012年12月 至 2013 年1月
吉首大学教务处制
目 录
一、 前 言 - 2 -
1. 功能分析 - 2 -
2. 人员分配 - 3 -
3. 进度安排 - 3 -
二、 概要设计 - 4 -
1. 系统的目标 - 4 -
2. 系统的功能结构 - 4 -
三、 详细设计 - 5 -
1. 主函数模块设计 - 6 -
2. 功能1模块设计 - 7 -
3. 功能2模块设计 - 8 -
4. 功能3模块设计 -10-
5. 功能4模块设计 -13-
6. 功能5模块设计 -17-
7. 功能6模块设计 -17-
8. 功能7模块设计 - 19-
9. 功能8模块设计 - 20-
10. 功能9模块设计 - 21-
11. 功能10模块设计 - 23-
12. 功能11模块设计 - 23-
四、 源代码及调试 - 24 -
1. 源代码 - 24 -
2. 测试1 - 41 -
3. 测试2 - 42 -
五、 特殊问题及解决方法 - 42 -
1. 问题1 - 42 -
2. 问题2 - 42 -
3. 问题3 - 42 -
六、 总结与体会 - 42 -
七、 参考文献 - 43 -
销售人员管理系统
一、前 言
1. 功能分析
本系统是一个对公司销售人员信息进行录入、增加、删除、修改和查询的管理应用软件,用户可以对文件中存储的销售人员信息进行查询、排序和浏览,以及了解销售人员基本信息等。该软件给用户提供了一个简单的人机界面,根据用户输入的内容进行相应的操作。其相关功能及分析如下:
⑴、用户验证:
根据用户输入的用户名和密码判断是否合法用户(合法用户可以不只一个),并进行相应处理。
⑵、提供系统操作菜单:
使用户能够通过菜单进行功能选择,并可以任意多次选择执行不同功能,直到用户选择“退出程序”才终止程序的执行。
⑶、创建销售人员信息文件:
用户根据提示输入编号、姓名、负责区域(东城区、西城区、海淀区、朝阳区等)、销售业绩(用金额表示)、联系电话即可创建好用户需要的信息。
⑷、增加销售人员信息:
可以根据用户的要求增加销售人员的信息。
⑸、删除销售人员信息:
由用户指定要删除的条件对销售人员信息进行删除,例如:按照编号或姓名或区域进行删除。
⑹、修改销售人员信息:
可以根据用户指定要修改的条目对信息进行相应的修改,例如:可以根据用户指定的编号或姓名或区域或销售业绩或电话号码进行修改。
⑺、查询销售人员信息:
可以根据用户指定要查询的条目查询到相关信息,例如:用户可以按照编号或姓名或区域或销售业绩或电话查询到满足条件的销售人员的相关信息。
⑻、浏览全部销售人员信息:
通过存储文件的函数可以查看销售人员信息,而且该信息是以表格的形式显示。
⑼、统计并输出指定区域销售情况:
可根据用户提供的要统计的区域对该区域的销售情况进行统计并可以以表格格式输出统计结果。
⑽、对销售人员业绩信息进行排序:
根据用户输入的销售人员的信息对这些信息进行排序并输出排序结果。
2. 人员分配
小组组长:陈结
小组成员:胡金欢、马少仁、刘慧惠
项目分工:陈结:ppt的制作、界面的制作、主菜单函数、创建销售人员信息、修改销售人员信息、浏览全部销售人员信息、数据的文件保存、打开随机储存文件。
胡金欢:课程设计报告文档和查询销售人员的信息。
马少仁:增加销售人员信息和删除销售人员信息。
刘慧惠:统计并输出指定区域销售情况、指定销售人员业绩、对销售人员业绩信息进行排序。
3. 进度安排
2012年12月20日——2012年12月29日:制作主函数和主界面。
2012年12月30日——2012年12月30日:查询销售人员的信息;统计并输出指定区域销售情况、指定销售人员业绩;增加销售人员信息;修改销售人员信息;浏览全部销售人员信息。
2012年12月31日——2012年12月31日:数据的文件保存;对销售人员业绩信息进行排序;删除销售人员信息;课程设计报告文档(大部分)。
2013年1月1日——2013年1月4日:对界面的设计和系统的调试;完成课程设计报告文档;添加程序注释;制作PPT。
2013年1月5日——2013年1月5日:讨论关于答辩的问题,打印所需资料。
二、概要设计
1. 系统的目标
先验证用户的信息,给用户提供一个主菜单使用户可以根据主菜单上的提示输入操作项选项,用户便可以进行一系列对销售人员信息的操作,例如用户可以对文件中存储的销售人员信息进行查询、排序、浏览、删除、统计和增加等操作。
2. 系统的功能结构
主菜单函数的功能:给用户提供主菜单,使用户能够通过菜单进行功能选择,并可以任意多次选择执行不同功能,直到用户选择“退出程序”才终止程序的执行。
①open()函数的功能:用于给用户随机访问文件,即打开相关文件。
②user()函数的功能:用来检验用户的信息,根据用户输入的用户名和密码判断是否合法用户,并进行相应处理。
③found()函数的功能:用于创建销售人员信息,用户根据提示输入编号、姓名、负责区域(东城区、西城区、海淀区、朝阳区等)、销售业绩(用金额表示)、联系电话即可创建好用户需要的信息。
④add()函数的功能:可以根据用户的要求增加销售人员的信息。
⑤cancel()函数的功能:完成销售人员信息的删除,由用户指定要删除的条件对销售人员信息进行删除,例如:按照编号或姓名或区域进行删除。
⑥revamp()函数的功能:可以根据用户指定要修改的条目对信息进行相应的修改,例如:可以根据用户指定的编号或姓名或区域或销售业绩或电话号码进行修改。
⑦remand()函数的功能:可以根据用户指定要查询的条目查询到相关信息,例如:用户可以按照编号或姓名或区域或销售业绩或电话查询到满足条件的销售人员的相关信息。
⑧scanf()函数的功能:以表格的形式显示用户要浏览的销售人员的信息。
⑨statistic()函数的功能:统计并输出指定区域销售情况。可根据用户提供的要统计的区域对该区域的销售情况进行统计并以表格格式输出统计结果。
⑩sort()函数的功能:对销售人员业绩信息进行排序。根据用户输入的销售人员的信息对这些信息进行排序并输出排序结果。
三、详细设计
详细设计文档应该包括对每一个对象类的详细描述,以及对对象类的属性和方法的详细描述。写出算法、流程图。详细设计文档还应该把总体设计文档中所设计的其它内容进一步充实。最后详细设计文档中应该对本系统中关键的问题或者你认为自己最满意的设计内容做详细的说明和归纳性总结。
1. 主函数模块设计
(1)模块概述
int main()
{
int result,function,n;
int flag2 = 1;
user();//用户验证
system("cls");//清屏
n=found();//创建销售人员信息
while(flag2)
{
system("cls");//清屏
system("color 9f");//控制界面颜色
printf("\n******************************欢迎菜单操作**************************************\n");
printf("\t\t\t1:增加销售人员信息\n");
printf("\t\t\t2:删除销售人员信息:\n");
printf("\t\t\t3:修改销售人员信息\n");
printf("\t\t\t4:查询销售人员信息\n");
printf("\t\t\t5:浏览全部销售人员信息\n");
printf("\t\t\t6:统计并输出指定区域销售情况、指定销售人员业绩和\n");
printf("\t\t\t7:对销售人员业绩信息进行排序\n");
printf("\t\t\t8:打开随机储存文件\n");
printf("\t\t\t9:退出服务\n");
printf("\n********************************************************************************\n");
printf("请选择输入功能数字: ");
scanf("%d",&function);
if(function==1)//增加销售人员信息
n=add(n);
else if(function==2)//删除销售人员信息
n=cancel(n);
else if(function==3)//修改销售人员信息
revamp(n);
else if(function==4)//查询销售人员信息
demand(n);
else if(function==5)//浏览全部销售人员信息
scan(n);
else if(function==6)//统计并输出指定区域销售情况、指定销售人员业绩
statistics(n);
else if(function==7)//对销售人员业绩信息进行排序
sort(n);
else if(function==8)//打开随机储存文件
open();
else if(function==9)
break;
else
printf("亲,输入有误\n");
printf("\n输入<回车键>返回主菜单操作");
getchar();getchar();
}
}
(2)技术分析:运用if条件语句实现主菜单选择的功能。
(3)功能实现: 实现主菜单的选择界面。
2. 功能1模块设计
(1)模块概述
int add(int n)//增加销售人员信息
{
int m;
while(
system("cls"),//清屏
system("color 9f"),//控制界面颜色
printf("\n***********************欢迎进入增加销售人员信息*********************************\n"),
printf("\t\t\t1:增加销售人员信息\n"),
printf("\t\t\t2:退出\n"),
printf("\n********************************************************************************\n"),
printf("请选择输入功能数字: "),
scanf("%d",&m)!=EOF)
if(m==1)//增加的销售人员信息
{
printf("请输入新添人员编号:");
scanf("%s",sale[n].num);
printf("请输入新添人员姓名:");
scanf("%s",sale[n].name);
printf("请输入新添人员负责区域:");
scanf("%s",sale[n].area);
printf("请输入新添人员销售业绩:");
scanf("%d",&sale[n].money);
printf("请输入新添人员联系电话:");
scanf("%s",sale[n].phone);
n++;
text(n);//数据的文件保存
printf("\n********************************************************************************\n"),
printf("请按<回车键>结束该次添加");
getchar();getchar();
}
else
return n;
return n;
}
(2)技术分析:当if条件成立时,用户可以根据提示输入要添加的销售人员的相关信息,并将增加的信息返回到主函数中。
(3)功能实现:根据用户的需求按条件增加销售人员的相关信息
3. 功能2模块设计
(1)模块概述
int cancel(int n)//删除销售人员信息
{
int i,k,m,leap=1;
struct salesman sale1;
while(
system("cls"),//清屏
system("color 9f"),//控制界面颜色
printf("\n***********************欢迎进入删除销售人员信息*********************************\n"),
printf("\t\t\t1:按照编号删除\n"),
printf("\t\t\t2:按照姓名删除\n"),
printf("\t\t\t3:按照电话删除\n"),
printf("\t\t\t4:退出该服务\n"),
printf("\n********************************************************************************\n"),
printf("请选择输入功能数字: "),
scanf("%d",&m)!=EOF)
{
if(m==1)//按照编号删除
{
printf("请输入你要删除人员的编号:");
scanf("%s",sale1.num);
for(i=0;i<n;i++)
{
if(strcmp(sale1.num,sale[i].num)==0)//找出删除人员的数组下标
{
leap=0;
printf("\n********************************************************************************\n"),
printf("删除成功\n");
break;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else if(m==2)//按照姓名删除
{
printf("请输入你要删除人员的姓名:");
scanf("%s",sale1.name);
for(i=0;i<n;i++)
{
if(strcmp(sale1.name,sale[i].name)==0)//找出删除人员的数组下标
{
leap=0;
printf("\n********************************************************************************\n"),
printf("删除成功\n");
break;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else if(m==3)//按照电话删除
{
printf("请输入你要删除人员的电话:");
scanf("%s",sale1.phone);
for(i=0;i<n;i++)
{
if(strcmp(sale1.phone,sale[i].phone)==0)//找出删除人员的数组下标
{
leap=0;
printf("\n********************************************************************************\n"),
printf("删除成功\n");
break;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else
return 0;
for(k=i;k<n;k++)//进行数据的从新整合
{
strcpy(sale[k].num,sale[k+1].num);
strcpy(sale[k].name,sale[k+1].name);
strcpy(sale[k].area,sale[k+1].area);
sale[k].money=sale[k+1].money;
strcpy(sale[k].phone,sale[k+1].phone);
}
getchar();
text(n-1);//数据的文件保存
return (n-1);
}
}
(2)技术分析:该函数内包含一个小菜单,用户可以根据菜单进行选择要删除的信息内容。实现该功能的是if条件语句,当输入的信息满足哪个条件就按照其相关的语句继续运行,最后将需返回的值返回主函数。
(3)功能实现:根据用户的要求按条件删除销售人员的相关信息。
4. 功能3模块设计
(1)模块概述
int revamp(int n)//修改销售人员信息
{
int i,m,leap;
struct salesman sale1;
long money1;
while(
system("cls"),//清屏
system("color 9f"),//控制界面颜色
leap=1,
printf("\n***********************欢迎进入修改销售人员信息*********************************\n"),
printf("\t\t\t1:按照编号修改\n"),
printf("\t\t\t2:按照姓名修改\n"),
printf("\t\t\t3:按照电话修改\n"),
printf("\t\t\t4:退出该服务\n"),
printf("\n********************************************************************************\n"),
printf("请选择输入功能数字: "),
scanf("%d",&m)!=EOF)
{
if(m==1)
{
printf("请输入你要修改人员的编号:");
scanf("%s",sale1.num);
for(i=0;i<n;i++)
{
if(strcmp(sale1.num,sale[i].num)==0)//找到并修改指定人员的信息
{
printf("请输入要修改人员姓名:");
scanf("%s",sale1.name);
printf("请输入要修改人员负责区域:");
scanf("%s",sale1.area);
printf("请输入要修改人员销售业绩:");
scanf("%d",&sale1.money);
printf("请输入要修改人员联系电话:");
scanf("%s",sale1.phone);
sale[i]=sale1;
text(n);//数据的文件保存
printf("亲,修改成功按<回车键>返回操作菜单\n");
getchar();getchar();
leap=0;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else if(m==2)
{
printf("请输入你要修改人员的姓名:");
scanf("%s",sale1.name);
for(i=0;i<n;i++)
{
if(strcmp(sale1.name,sale[i].name)==0)//找到并修改指定人员的信息
{
printf("请输入要修改人员编号:");
scanf("%s",sale1.num);
printf("请输入要修改人员负责区域:");
scanf("%s",sale1.area);
printf("请输入要修改人员销售业绩:");
scanf("%d",&sale1.money);
printf("请输入要修改人员联系电话:");
scanf("%s",sale1.phone);
sale[i]=sale1;
text(n);//数据的文件保存
printf("亲,修改成功按<回车键>返回操作菜单\n");
getchar();getchar();
leap=0;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else if(m==3)
{
printf("请输入你要修改人员的电话:");
scanf("%s",sale1.phone);
for(i=0;i<n;i++)
{
if(strcmp(sale1.phone,sale[i].phone)==0)//找到并修改指定人员的信息
{
printf("请输入要修改人员编号:");
scanf("%s",sale1.num);
printf("请输入要修改人员姓名:");
scanf("%s",sale1.name);
printf("请输入要修改人员负责区域:");
scanf("%s",sale1.area);
printf("请输入要修改人员销售业绩:");
scanf("%d",&sale1.money);
sale[i]=sale1;
text(n);//数据的文件保存
printf("亲,修改成功按<回车键>返回操作菜单\n");
getchar();getchar();
leap=0;
}
}
if(leap)
{
printf("亲,输入有误按<回车键>返回操作菜单\n");
getchar();getchar();
}
}
else
return 0;
getchar();
printf("\n********************************************************************************\n");
}
}
(2)技术分析:运用for语句去查找要修改的内容;创建了一个小菜单(让用户选择修改的方式)再通过if条件选择修改方式并进行相应的修改。
(3)功能实现:根据用户的要求对销售人员信息进行相应的修改。
5. 功能4模块设技
(1)模块概述
int demand(int n)//查询销售人员信息
{
char dong[n];
int i,flag=0,m,k;
long mon;
while(
system("cls"),//清屏
system("color 9f"),//控制界面颜色
printf("\n**************************欢迎进入查询菜单操作**********************************\n"),
printf("\t\t\t1:按编号查询\n"),
printf("\t\t\t2:按姓名查询\n"),
printf("\t\t\t3:按负责区域查询\n"),
printf("\t\t\t4:按销售业绩查询\n"),
printf("\t\t\t5:按联系电话查询\n"),
printf("\t\t\t6:返回主菜单\n"),
printf("\n********************************************************************************\n"),
printf("请选择输入功能数字: "),
scanf("%d",&m)!=EOF)
{
getchar();
if(m==1)
{
printf("请输入欲查询的人员的编号:");
gets(dong);
for(i=0;i<n;i++)
{
if(strcmp(dong,sale[i].num)==0)//找到指定人员的数组下标
{
flag=1;
k=i;
}
}
if(flag!=1)
printf("对不起!没有可供您查询的内容。");
if(flag==1)//输出查询的人员的信息
printf("编号:%s\n姓名:%s\n负责区域:%s\n销售业绩:%ld\n联系电话:%s\n",sale[k].num,sale[k].name,sale[k].area,sale[k].money,sale[k].phone);
printf("\n按<回车键>返回菜单");
getchar();
continue;
}
if(m==2)
{
printf("请输入欲查询的人员的姓名:");
gets(dong);
for(i=0;i<n;i++)
{
if(strcmp(dong,sale[i].name)==0)//找到指定人员的数组下标
{
flag=1;
k=i;
}
}
展开阅读全文