资源描述
西安郵電大学
C语言课程设计报告
题 目: 相机销售管理系统
院系名称: 计算机学院
专业名称: 计算机科学与技术
班 级:
学生姓名:
学号(8位):
指导教师:
设计起止时间:
一. 设计目的
1:数量掌握c语言编程,并灵活营运函数实现不同的功能;
2:用c语言编写相机销售管理系统的程序;
3:更深入了解c语言,牢记其中各注意事项。
二. 设计内容
相机销售管理系统:
参数:相机型号(品牌version),感光器件(sensetization),市场价(price),光学变焦倍数(optical_zoom),最大像素(highest_pixel)。
提供的功能:
1:系统界面处理(包括密码登陆,密码的修改等);
2:系统工作方式,以菜单方式工作;
3:商户功能
a:相机参数及内容的顺序输出(按市场价高低);
b: 相机参数及内容的录入与信息的增加——输入;
c: 相机参数及内容的显示——输出;
d:相机参数及内容的选择删除;
e: 相机参数及内容的修改;
f:相机参数及内容的查询与统计
(1):按型号(品牌) (2):按感光器件
(3):按市场价 (4):按光学变焦倍数
(5):按像素
4:用户功能
a:相机参数及内容的显示——输出;
b:相机参数及内容的查询与统计
(1):按型号(品牌) (2):按感光器件
(3):按市场价 (4):按光学变焦倍数
(5):按像素
c:相机参数及内容的顺序输出(按市场价高低)
三.概要设计
1.功能模块图;
密码管理
密码登录
修改密码
商户管理
用户管理
读文本
顺序输出
菜单(登录界面、主菜单)
进入系统
查找信息
删除文件
修改信息
增加文件
读文本
查找信息
顺序输出
型号
市场价
感光器件
光学变焦倍数
最大像素
型号
main()主函数
2.各个模块详细的功能描述。
● 主函数:
void main();
● 登录菜单:
void headmean(); //进入主系统
● 进入系统选择服务
void MainMenu(); //用户选择系统
● 选择服务
(1):Int CipherTest(); //用户密码检验
void RevisalCipher(); //密码修改
(2):进入主菜单:headmean();
● 用户选择
void MainMenu(); //用户选择系统
● 正式使用系统
void opensurface_1(); //商户管理界面
void c; //客户管理界面
● 商户管理
void save_inf(Linklist L); //创建文件
void read_file(); //读文件
void inter_sort_s(); //商户进入排序操作
void add_file(); //增加文件信息
Linklist delect_mean(); //进入删除操作
void amend_file(); //进入修改操作
void find_message_s(); //进入商户查找操作
● 客户管理
void read_file(); //读文件
void inter_sort_c(); //客户进入排序操作
void find_message_c(); //进入客户查找操作
● 菜单函数:
void int_mean(); //系统主菜单
void inter_mean(); //功能主菜单
void surface_1(); //商户菜单
void surface_2(); //用户菜单
void amend_mean(); //修改项菜单
void find_mean(); //查找并统计菜单
四.详细设计
1.功能函数的调用关系图;
main()主函数
save_inf(Linklist L)
headmean()
opensurface_1()
inter_sort_s()
CipherTest()
add_file()
amend_file()
read_file()
find_message_s()
delect_mean()
Opensurface_2()
read_file()
inter_sort_c()
find_message_c()
2.各功能函数的数据流程图;执行CipherTest()函数
1>:密码,执行CipherTest()函数
开始
判断输入密码是否正确
密码修改
结束
2>读取信息函数,执行read_file()函数
开始
打开文件
将文件信息存到链表中
输出链表信息
结束
3>:按价格顺序输出,执行sort_s()函数
结束
开始
将文本信息存到链表中
保留前驱结点
进入排序循环
若第i项价格小于其后所比较的
交换两个信息
改链
4>:增加信息,执行add_file()函数
结束
开始
创见链表
添加信息到链表中
将链表存到文本中
保存文本
5>:删除信息,执行delect_mean()函数
开始
结束
将文本信息存到链表中
找到要删除的信息
将删除信息的前个结点与其后结点相接,释放删除的信息空间
保存文本
6>:修改信息,执行amend_file()函数
开始
结束
将文本信息存到链表中
找到要修改的信息
将修改项的新信息重新输入
保存文本
7>:查找信息并统计,执行find_message_s()函数
开始
结束
将文本信息存到链表中
选择寻找信息的方式
根据查找方式找到所查信息
保存文本
进入循环查找
输出所查找信息语气查找的结果数
3.重点设计及编码(其中主函数)。
1>:密码验证与密码修改(实现密码错误时可再次输入)
void RevisalCipher() //密码修改
{
char c2[6],c[6];
printf("请输入新的6位数密码:\n");
scanf("%s",c2);
printf("请再次输入您的密码:\n");
scanf("%s",c);
system("cls");
if (strcmp(c2,c)==0)
printf("密码修改成功!\n");
printf("\n");
printf("\n");
}
int CipherTest() //密码管理
{
char c1[6],c2[]="111111";
int m;
system("cls");
printf("\n\n\n\n");
do
{
printf(" 请输入您的密码(首次进入为6位初始密码)\n");
flushall();
scanf("%s",c1);
// c1 = getchar();
if (strcmp(c1,c2)==0)
{
printf("\n");
return 1;
}
else
{
printf("密码输入错误,请重新出入!\n");
printf("是否重新输入(重新输入请键入1;
退出请键入0):\n");
scanf("%d",&m);
}
flushall();
}
while (m==1);
return 0;
}
2>:显示文本信息(将文本信息存到链表中)
Linklist read_inf() //从指定文件中读取信息并存入单链表中
{
Linklist head;
Mobel *p,*s;
FILE *fp;
char filename[40];
int i=0;
system("cls");
flushall();
printf("读文件 请输入文件名(f://b.txt有文件):\n");
gets(filename);
for(; (fp = fopen(filename,"rt")) == NULL ;)
{
printf("读文件失败,请重新输入文件名:\n");
flushall();
gets(filename);
}
3>:输出链表信息(要有一个指向指针)
void print_inf(Linklist L) //输出链表信息
{
Mobel *p;
system("cls");
printf(" 该品牌信息如下:\n");
printf("\n");
printf(" 型号 最大像素(万) 市场价(元) 光学变焦倍数 感光器件\n");
for(p = L->next;p->next !=NULL;p = p->next)
printf(" %-15s %-15d %-15d %-15d %-5s \n",p->version,p->highest_pixel,p->price,p->optical_zoom,p->sensetization);
flushall();
printf("\n");
}
4>:顺序输出(排序函数关键在找最大节点的位置时能记录前一节点的位置,并实现链表的重新连接)
Linklist sort_price() //排序
{
Linklist head;
Mobel *pre, *mid, *m, *p;
head = read_inf();
p = head->next;
while(p != NULL)
{
mid = head->next;
if(head->price < head->next->price)
{
head->next = mid->next;
mid->next = head;
head = mid;
}
pre = head;
mid = head->next;
m = mid->next;
while(mid->next != NULL)
{
if(mid->price < m->price)
{
pre->next = mid->next;
mid->next = m->next;
m->next = mid;
}
pre = pre->next;
mid = pre->next;
m = mid->next;
}
p = p->next;
}
return head;
}
5>:修改函数主要是对修改项的选择
Linklist amend(Linklist L) //修改链表
{
char version[10];
Mobel *p;
// int n;
char m;
amend_mean();
printf("\n");
printf(" 请正确输入要修改内容所对应的型号:\n");
flushall();
gets(version);
p = L->next;
// for(p=L; strcmp(p->version,Version) != 0 && p != NULL; p = p->next) //错在这
// ; printf("正确:\n");
while(p != NULL && strcmp(p->version,version))
p = p->next;
if(p != NULL)
{
amend_mean();
printf(" 请选择要修改的项目:\n");
scanf("%d",&m);
printf("\n");
switch(m)
{
case 1: printf(" 请输入新型号的内容:\n");
flushall();
gets(p->version);
loop_amend(L);
break;
case 2: printf(" 请输入最新价格:\n");
scanf("%d",&p->price);
loop_amend(L);
break;
case 3: printf(" 请输入最大像素:\n");
scanf("%d",&p->highest_pixel);
loop_amend(L);
break;
case 4: printf(" 请输入光学变焦倍数:\n");
scanf("%d",&p->optical_zoom);
loop_amend(L);
break;
case 5: printf(" 请输入最大像素的内容:\n");
flushall();
gets(p->sensetization);
loop_amend(L);
break;
case 6: opensurface_1();
break;
case 7: break;
default: printf("按任意键返回上一界面");
getch();
opensurface_1(); break;
}
}
else
{
printf("型号输入错误,无此型号\n");
amend(L);
}
return L;
}
6>:删除函数中主要是前驱结点与后接结点的链接,并释放所删除项的空间
Linklist delect_link(Linklist L)
{
Mobel *p,*s;
char m,version[10];
flushall();
printf("确定要进行删除文件操作 y or n:\n");
scanf("%c",&m);
if(m == 'y' || m == 'Y')
{
s = (Mobel *)malloc(sizeof(Mobel));
printf("请输入要删除的型号\n");
flushall();
gets(version);
for(s = L, p = L->next; p != NULL && strcmp(p->version,version); s = s->next,p = p->next)
;
if(p != NULL)
{
s->next = p->next;
free(p);
printf("删除成功\n");
delect_link(L);
}
else
{
printf("输入型号错误\n");
}
}
else if(m == 'n' || m == 'N')
{
flushall();
printf("按任意键显示删改后内容");
getch();
print_inf(L);
}
else
{
printf("输入错误\n");
delect_link(L);
}
// printf("是否返回上一界面y or n\n");
return L;
}
6>:添加文本信息主要是常见链表
Linklist build_creat() //建立链表
{
Linklist L;
Mobel *p,*s;
char version[10];
int price;
int highest_pixel;
int optical_zoom;
char sensetization[5];
// char sensetization_size;
int i = 0;
L = (Linklist)malloc(sizeof(Mobel));
// s = (Mobel *)malloc(sizeof(Mobel));
L->next = NULL;
p = L;
flushall();
printf("请输入第一个型号(000结束):\n");
while(1)
{
flushall();
gets(version);
if(strcmp(version,"000") != 0)
{
i++;
// scanf("%d,%d,%d,%s",&highest_pixel,&price,&optical_zoom,&sensetization);
printf("最大像素:");
scanf("%d",&highest_pixel);
printf("市场价:");
scanf("%d",&price);
printf("光学变焦倍数:");
scanf("%d",&optical_zoom);
flushall();
printf("感光器件:");
;
gets(sensetization);
// gets(sensetization_size);
s = (Mobel *)malloc(sizeof(Mobel));
strcpy(s->version,version);
s->highest_pixel = highest_pixel;
s->price = price;
s->optical_zoom = optical_zoom;
strcpy(s->sensetization,sensetization);
p->next = s;
p = s;
printf("请新增第%d个信息的型号(000结束):\n",i+1);
}
else
{
p->next = NULL;
break;
}
}
printf("共有%d个型号:\n",i);
return L;
}
五.测试数据及运行结果
1.正常测试数据(3组)及运行结果;
1>:主界面
2>:登陆菜单:
3>:修改密码
4>:进入系统,选择用户身份
5>:进入商户管理界面
6>:读取信息
7>:顺序输出(按价格由高到低)
8>:增加信息
9>:删除信息
10>:查找信息并统计
11>:修改信息
12>:进入客户管理系统
2.非正常测试数据(2组)及运行结果。
1>:密码输入错误可继续输入直到正确
2>:用户选择错误可在继续选择直到正确
3>:文件名输入错误可同样进行反复输入
4>:所查找信息未找到系统会提示输入错误
六.调试情况,设计技巧及体会
1.对自己的设计进行评价,指出合理和不足之处,提出改进方案;
2.对设计及调试过程的心得体会。
经过这两周的实习,确实是对c变成有了更深入的认识。C语言是一种奇妙的语言。
我做的课题是相机销售管理系统。刚开始做课程设计时说实在是不知如何下手,不知该从那方面开始。开始的一周,总在怀疑自己能不能编写出要求的程序来,总想着自己不可以,也就一定程度上开始投机取巧,三天内也只是在某个功能模块里运行处“预期”的结果,当八个模块组合起来却不能运行。放假的两天没怎么运行程序,就在反思,后来终于下决心重新编写程序,我相信我可以的。第二周,正式开始我的程序,将书中相关内容知识反复看了好几遍,并且比较深入的认识到书中的每个相关程序,对于每一模块都认真思考,模块的组合再三认证,讲过4天的努力,终于我做到了,完全是我一个人成果,这真让人兴奋。当然,其间也请教了班里的同学,这里,谢谢你们!!在我编程遇到问题时,是你们不厌其烦的帮我解决,谢谢你们。
这个课题做完后,对c,我也考虑了些。C,这种语言真是奇妙!编译时出现问题,这还好解决,可以直接根据提示找到问题所在,可要是在运行时出现问题,可真不是好解决的。C的要求真的比较苛刻,就是输入输出格式不对也会出现问题,不时出现乱码,就是直接运行不出,这点需注意。变量的类型也同等重要,需谨慎。变成的一些细小问题是要特别注意的,比如说,语句的符号怒该省的必需的有,不能有的绝不能有,中英文的区别,语句中必须是英文字符!所引用的函数必需的在所在的库函数中才能被引用,否则会出现错误。
Flushall(),这个函数,可真不可小视,不仅在gets()函数前必须加此函数外,scanf()有时也需要,否则所输入的数据视为空数据,从而影响到函数无法输入数据。
两周的实习结束,我对c有了更深入的了解,这两周,不仅是对这一年的总结应用,更是下一学年的一个好的开始!!
七.参考文献
八.附录:源代码(电子版)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
#include<io.h>
#include<conio.h>
#define LEN 100
typedef struct brand_mobel //指针结构体变量
{
char version[10];
char sensetization[5];
int price;
int highest_pixel;
int optical_zoom;
// char sensetization;
// char sensetization_size;
struct brand_mobel *next;
}*Linklist,Mobel;
//函数声明
void head_mean(); //进入主系统
void int_mean(); //系统主菜单
void MainMenu(); //用户选择系统
void inter_mean(); //功能主菜单
void surface_1(); //商户菜单
void surface_2(); //用户菜单
void amend_mean(); //修改项菜单
void opensurface_1(); //商户管理主界面
void opensurface_2(); //客户管理主界面
Linklist get_L(); //得到链表
int CipherTest(); //用户密码检验
void RevisalCipher(); //密码修改
void save_inf(Linklist L); //创建文件
Linklist build_creat(); //创建链表
Linklist read_inf(); //将文件信息放到链表中
void read_file(); //读文件
void print_inf(Linklist L); //输出链表信息
void add_file(); //增加文件信息
Linklist delect_mean(); //进入删除操作
Linklist delect_link(Linklist L); //删除链表
void amend_file(); //进入修改操作
Linklist amend(Linklist L); //修改链表
void loop_amend(Linklist); //循环修改链表操作
Linklist sort_price(); //链表排序
void inter_sort_s(); //商户进入排序操作
void inter_sort_c(); //客户进入排序操作
void find_message_s(); //进入商户查找操作
void find_message_c(); //进入客户查找操作
void find_mean(); //查找并统计菜单
void save_inf(Linklist L); //将链表信息存入文件中
void find_version(); //型号查找
void find_price(); //价格查找
void find_highest_pixel(); //最高像素查找y
void find_optical_zoom(); //光学变焦倍数查找
void find_sensetization(); //感光器件查找
void int_mean() //系统主菜单
{
system("cls");
printf("\n\n\n");
printf(" 欢迎进入相机销售管理系统 \n"); //解决
printf("\n");
printf(" 主界面 \n");
printf("\n");
printf(" 1: 用户登录 \n");
printf("\n");
printf(" 2: 退出系统 \n");
printf("\n\n\n");
}
void inter_mean() //功能主菜单
{
system("cls");
printf("\n\n\n");
printf(" 欢迎进入相机销售管理系统 \n");
printf("----------------------------------------------------------------------\n");
printf("\n");
printf(" 1: 修改密码\n");
printf(" 2: 进入系统\n");
printf(" 3: 返回主菜单\n");
printf(" 4: 退出系统\n");
printf("\n\n");
printf("----------------------------------------------------------------------\n");
printf("\n\n");
}
void surface_1() //商户管理主界面
{
printf("\n\n");
printf("*************************商户管理主界面*************************\n");
printf("\n");
printf(" 1: 读取信息 \n");
printf(" 2: 顺序输出 \n");
printf(" 3: 增加信息 \n"); //yes
printf(" 4: 删除信息 \n");
printf(" 5: 修改信息 \n"); //yes
printf(" 6: 查找并统计 \n");
printf(" 7: 返回上一界面 \n"); //yes
printf(" 8: 返回主菜单 \n");
printf(" 9: 退出系统 \n"); //yes
printf("\n");
printf("****************************************************************\n");
printf("\n");
printf("\n");
flushall();
}
void surface_2() //客户管理主界面
{
printf("\n\n");
printf("*************************客户管理主界面*************************\n");
printf("\n");
printf(" 1: 读取信息 \n");
printf(" 2: 查找信息 \n");
printf(" 3: 按顺序查看信息 \n");
printf(" 4: 返回上界菜单 \n");
printf(" 5: 退出系统 \n");
printf("\n")
展开阅读全文