中北大学
数 据 结 构
课 程 设 计 说 明 书
学生姓名: 学 院: 专 业: 题 目: 成绩 王举然 学 号: 0921010443 软件学院 软件工程 客户消费积分管理系统 尹四清、薛海丽 指导教师
2010年12月20日
1. 设计目的
《数据结构》课程主要介绍最常用的数据结构,阐明各种数据结构内在的逻辑关系,讨论其在计算机中的存储表示,以及在其上进行各种运算时的实现算法,并对算法的效率进行简单的分析和讨论。进行数据结构课程设计要达到以下目的:
了解并掌握数据结构与算法的设计方法,具备初步的独立分析和设计能力; 初步掌握软件开发过程的问题分析、系统设计、程序编码、测试等基本方法和技能; 提高综合运用所学的理论知识和方法独立分析和解决问题的能力;
训练用系统的观点和软件开发一般规范进行软件开发,培养软件工作者所应具备的科学的工作方法和作风。 2. 设计内容和要求 设计内容:
针对客户的消费情况,进行客户管理,根据客户的消费积分对客户实行不同程度的打折优惠。
1) 2) 3)
采用一定的存储结构进行客户信息的存储; 对客户的信息可以进行修改、删除、添加; 能够根据消费情况进行客户积分的计算;
4) 根据积分情况实行不同程度的打折优惠; 设计要求:
(1) 符合课题要求,实现相应功能; (2) 要求界面友好美观,操作方便易行; (3) 注意程序的实用性、安全性; 3.本设计所采用的数据结构
本系统用到的主要数据结构为数组和文件。
一个数组对应一个客户,里面用3个字符串分别存储着用户的客户号、姓名和消费情况。 然后将数组写入文件,查询时读取文件,提取相应信息。同时编制了删除和查找函数,方便此消费系统的使用。
4.功能模块详细设计 4.1 详细设计思想
在数组中定义3个字符串gukehao、xingming、xiaofei,分别存储客户的顾客号、姓名、消费额。
通过录入函数对3个字符串循环进行赋值,然后根据消费额使用if语句判断其折扣区间,复制完毕后存入文件s_score.txt。
修改函数首先按照用户输入的客户号找到相应存储文件,然后输出相应信息供客户阅览,最后提供修改命令,修改完毕后删除原文件,用新文件替代原文件。
查找函数首先读取文件,然后根据用户输入客户号找到相应文件输出客户信息(顾客号、姓名、消费额、积分、折扣)。
删除函数根据用户输入客户号找到相应文件进行删除。
主函数为用户界面,1-4分别对应录入、修改、查找、删除函数,5为退出。 ①当编码运行成功时候会出现如下图片:
图上为:1、录入,2、修改,3、删除,4、查找,5、退出。 这个时候请输入数字1,即录入客户消费情况,将会出现如下情况:
分别输入客户号,名字,消费情况,系统将会自动记录,以便于修改,删除,查找。 ②当要修改客户消费情况的时候,请先录入客人消费情况,如下:
然后退出将会回到首页,之后再输入数字2意为修改。将会有一下图片:
之后再次输入客人信息和消费情况。
③如果想删除这个消费信息,请在主界面输入数字3,之后出现:
如果你输入客户号码73,则会出现:
即删除了客户信息。
④如果想查找哪个客户的消费情况,则在主页面舒服数字4,会出现:
之后请输入客户号,比如刚刚设置的73号:
即客户的消费信息。 ⑤为退出系统。 4.2核心代码 #include \"stdafx.h\" #include \"stdio.h\" #include \"stdlib.h\" #include \"string.h\" #include \"conio.h\" #include \"ctype.h\" //#include \"mem.h\" #include \"malloc.h\" struct {
char gukehao[8]; char mingzi[20]; float score[6]; }data,info[1000]; int i,j,k=0; float n;
char temp[20],ch; FILE *fp,*fp1;
void luru() {
if((fp=fopen(\"s_score.txt\ {
printf(\"cannot open this file.\\n\"); getch();exit(0); }
for(i=0;i>=0;i++) {
printf(\"Please input gukehao:\"); gets(data.gukehao);
printf(\"please input mingzi:\"); gets(data.mingzi);
printf(\"Please input xiaofei:\"); gets(temp);data.score[0]=atof(temp); if(data.score[0]<=5000) n=1; else
if(data.score[0]<=10000&&data.score[0]>5000)
n=0.95;
else
n=0.9;
fwrite(&data,sizeof(data),1,fp);
printf(\"another?(input n to main/anykey to continue)\\n\"); ch=getch();
if(ch=='n'||ch=='N') break; } fclose(fp); }
void xiugai() {
if((fp=fopen(\"s_score.txt\ {
printf(\"Cannot open this file.\\n\"); exit(0); }
printf(\"\\nPlease input shuru xiugai gukehao:\"); scanf(\"%d\
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.gukehao); if(j==i) {
printf(\"gukehao:%s\\nmingzi:%s\\n\
printf(\"Please input mingzi:\");
gets(data.mingzi);
printf(\"Please input xiaofei:\");
gets(temp);data.score[0]=atof(temp);
} fwrite(&data,sizeof(data),1,fp1); }
fseek(fp,0L,0); fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1) {
fwrite(&data,sizeof(data),1,fp); }
fclose(fp); fclose(fp1); }
void chazhao()
{
if((fp=fopen(\"s_score.txt\ {
printf(\"\\nCannot open this file.\\n\"); exit(0); }
printf(\"\\nPlease input gukehao chakan:\"); scanf(\"%d\
while(fread(&data,sizeof(data),1,fp)==1) {
j=atoi(data.gukehao); if(i==j)
{
printf(\"gukehao:%s\\nmingzi:%s\\nxiaofei:%f\\njifen:%f\\nzhekou:%f\\n\data.mingzi,data.score[0],data.score[0],n); } }getch(); }
void shanchu() {
if((fp=fopen(\"s_score.txt\ {
printf(\"\\nopen score.txt was failed!\"); getch(); exit(0); }
printf(\"\\nPlease input gukehao which you want to del:\"); scanf(\"%d\
while((fread(&data,sizeof(data),1,fp))==1) {
j=atoi(data.gukehao); if(j==i) {
printf(\"Anykey will delet it.\\n\"); getch(); continue; }
fwrite(&data,sizeof(data),1,fp1); }
fclose(fp); fclose(fp1);
remove(\"s_score.txt\");
rename(\"temp.txt\ printf(\"Data delet was succesful!\\n\"); printf(\"Anykey will return to main.\"); getch(); }
void main() { while(1) {
system(\"cls\");
printf(\"* ========================================================= * \\n\"); printf(\"* 1>luru 2>xiugai * \\n\"); printf(\"* 3>shanchu 4>chazhao * \\n\"); printf(\"* 5>exit * \\n\");
printf(\"* * \\n\"); printf(\"* --------------------------------------------------------- * \\n\"); printf(\" Please input which you want(1-5):\\n\"); ch=getch(); switch(ch) {
case '1':luru();break; case '2':xiugai(); break; case '3':shanchu(); break; case '4':chazhao(); break; case '5':exit(0); default: continue; } } }
5.课程设计心得及存在问题
1.程序设计没有按照一定的流程来,会导致程序臃肿,可重复利用率低。
2.程序的选择语句运行比较的多,当初是为了程序的安全和便捷,选择了较多的选择,确认步骤,这样一来使得程序中的选择语句比较的多,乱,这个在概要设计中没有充分的理清思路,导致程序的可读性差。
3.这是第一次比较全面的设计一个可执行多种功能的程序的课程设计,暴露出较多的知识点的缺乏,比如文件的打开与保存。
4.程序的局限性较大,具体表现在由于采用数据组保存,则有个上限的问题,而且随着文本的数据的增大,对文本的操作将越来越浪费时间。
因篇幅问题不能全部显示,请点此查看更多更全内容