1、 HUBEI UNIVERSITY OF AUTOMOTIVE TECHNOLOGY C语言程序设计 课程设计汇报 课设题目: 汽车索赔管理系统 专 业: 电子信息工程(汽车电子) 班 级: 电信143 姓 名: 顾应洪 成 绩: 完成日期: 7月5日到7月10日 指导老
2、师: 胡宁亚 目 录 C语言程序设计 1 课程设计汇报 1 一、设计题目和要求 3 二、系统设计 4 2.1系统设计 4 2.2系统模块设计 5 2.3具体设计 6 2.4关键模块步骤图 7 三.测试结果 11 3.1欢迎界面 11 3.2主菜单界面 11 3.3录入学生成绩 12 3.4给定索赔编号,显示索赔信息 13 3.6给定索赔编号,删除索赔信息 14 3.7给定索赔编号,添加索赔信息 15 3.8给定索赔编号,修改索赔信息 15 3.9保留索赔信息 16 3.10题目要求
3、 17 3.11各模块测试用例数据确实定 17 四、课程设计总结 18 五.程序源代码 19 一、设计题目和要求 汽车索赔管理程序 题目描述 已知在汽车销售后,服务站在对故障汽车维修后,能够向汽车生产厂家进行索赔,设计一个汽车索赔管理程序,以方便汽车生产厂家对汽车售后索赔进行管理,该程序完成以下功效: (1)能从键盘输入索赔信息。 (2)指定索赔编号,显示索赔信息。 (3)指定底盘号,显示索赔历史。 (4)给定索赔编号,修改索赔信息。 (5)给定索赔编号,删除索赔信息。 题目要求: (1)根据分析、设计、编码、调试、测试软件过程完成
4、这个应用程序。 (2)索赔信息包含:索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期。 (3)为各项操作功效设计一个菜单,应用程序运行后,先显示这个菜单,然后用户经过菜单项选择期望进行操作项目。 输入要求: (1)应用程序运行后在屏幕上显示一个菜单。用户能够依据需求,选定对应操作项目。进入每个操作后,依据应用程序提醒信息,从键盘输入对应信息。程序依据用户输入信息完成对应处理,实现要求功效。 (2)能对输入数据进行简单校验,比如,维修日期必需是一个正当日期格式,索赔编号是唯一(一个索赔编号对应一次索赔索赔信息) 输出要求: (1)应用程序运行后,要在屏
5、幕上显示一个菜单。 (2)要求用户输入数据时,给出清楚、明确提醒信息,包含输入数据内容、格式和结束方法等。 (3)在程序完成处理后,要清楚地给出程序处理结果。比如,在给定索赔编号删除索赔信息时,假如该索赔不存在,要提醒没能删除,假如删除成功要提醒删除成功。 实现要求: (1)在程序中使用链表存放索赔信息。 (2)采取模块化程序设计方法,将程序中各项功效用函数实现。 提醒: (1)使用结构体表示索赔信息,一个结点保留一条索赔信息。 扩展功效: (1)提供部分统计功效。比如统计每个服务站索赔金额,依据审核人统计审核索赔次数。 (2)索赔信息
6、从文件读入。 (3)将索赔信息保留到文件中。 二、系统设计 2.1系统设计 欢迎界面 打印主菜单 汽车索赔信息情况 录入汽车索赔信息历史情况 给定索赔编号,显示历史索赔信息 给定地盘号,显示历史索赔信息 给定索赔编号,删除历史索赔信息 给定新索赔编号,添加索赔信息 给定新索赔编号,修改索赔信息 保留修改以后索赔信息 退出此系统 课设题目 2.2系统模块设计 1)主菜单界面:结构函数void menu (),实
7、现系统主菜单显示。 2) 索赔信息录入:结构函数void input(),实现从文件录入汽车索赔信息历史情况。 3)给定索赔编号,查询历史索赔信息:结构void find(),将输入索赔编号和全部索赔信息对照,输出和输入编号相匹配索赔信息。 4)给定底盘号,查询历史索赔信息:结构void finddomain(),将输入底盘号和全部编号底盘号信息对照,输出和输入底盘号相匹配索赔信息。 5)修改指定索赔信息:结构void change(),找出任意选项索赔信息,修改该对应选项索赔信息。 6)删除指定编号索赔信息:结构void delete (),找出给定编号索赔信息,删除该
8、编号信息。 7)添加新增索赔信息:结构void addclaim(),指定新编号,添加索赔信息。 8)保留索赔信息:结构void writeinfo(),将操作以后索赔信息保留到文件里边。 2.3具体设计 1、宏定义 #define LEN sizeof(struct claim ) 2、结构体定义 struct claim { char num[20]; char name[50]; char Audit[30]; char money[20]; char date[30];
9、 char domain[30]; struct claim *next; }; 3、全局变量及结构体指针定义 int info_flag,f=0; int flage=0; struct claim *head=NULL,*p,*p1,*p2,*p3; 4、函数申明 void welcome(); /*欢迎函数*/ void input(); /*读取索赔信息*/ int menue() ; /*菜单函数
10、/ void find() ; /*索赔编号查找索赔信息*/ void finddomain(); /*按底盘号查找索赔信息*/ void delete() ; /*按索赔编号删除索赔信息*/ void addclaim() ; /*添加索赔信息*/ void change(); /*修改索赔信息*/ void writeInfo(); /*把链表内容写进文*/ 5、
11、关键模块实现 系统以主函数int main()为入口,首先调用void welcome()函数,显示系统欢迎界面。然后显示主菜单界面,其次调用void input()函数,从文件读入索赔。最终调用void writeinfo()函数,使索赔信息保留。 2.4关键模块步骤图 打印欢迎界面 打印主菜单 接收用户选择 是否正当 是否为0 调用对应序号函数 退出系统 是 否 (1)主菜单函数 (2)给定索
12、赔编号,显示某位学生作业完成情况 索赔信息录入 按任意键继续 输入编号 否 判定正当性 是 (3)给定底盘号,显示全部对应索赔信息 索赔录入 按任意键退出 显示该底盘号对应索赔信息 输入底盘号 是 (4)给定索赔编号,修改该对应索赔信息 修改索赔信息 按任意键退出 输入编号 否 判定是否存在 是 (5)给定索赔编号,删除对应索赔信息 输入编号 否 判定是否存在 是 删除
13、其对应得索赔信息 按任意键退出 (6)保留索赔信息 输入路径 将索赔信息写入文件 信息保留完成,关闭文件 按任意键退出 三.测试结果 3.1欢迎界面 3.2主菜单界面 3.3录入学生成绩 3.4给定索赔编号,显示索赔信息 3.5给定底盘号,显示全部对应索赔信息 3.6给定索赔编号,删除索赔信息 3.7给定索赔编号,添加索赔信息 3.8给定
14、索赔编号,修改索赔信息 3.9保留索赔信息 3.10题目要求 3.11各模块测试用例数据确实定 建立文件为:索赔信息表.txt; 数据为: 1001 北京 小王 1000 0210 111 1002 湖北 小张 1002 112 1003 云南 小李 3000 1212 113 1004 浙江 小明 4000
15、 0211 114 1005 上海 小周 5000 0630 115 保留后文件为:1.txt 数据为: 1002 湖北 顾应洪 1002 112 1003 云南 小李 3000 1212 113 1004 浙江 小明 4000 0211 114 1005 上海 小周 5000 0630 115 1006 十堰 顾应洪 2800 -05-06 116 四、课程设计总结 在本学期对c语言粗略学习以后,我们进行这次课程设计,无疑加深了对c语言认识和应用。要想从书本走向实践是一个很艰苦地过
16、程,所以刚开始时候,我碰到了多种多样阻碍,以至于差点儿打消了我做这次设计念头。一开始就碰到了怎样能正确创建一个链表问题,在上课时候就模糊不清,不知道所以然,开始翻书本,问同学,仍然是朦朦胧胧,又玩命上机操作才最终得四处理。 在过程中问我才认识到自己自己还有很多知识没学好,基础知识没理清,而且很多东西还要去翻书,去网上搜索,而且碰到部分小错误运行不出来就会烦躁不安,逐步克服这些问题后我发觉对c语言越来越感爱好了,以后我要克服这些,尽可能保持一颗良好心态,学好c语言。首先我必需学好c语言基础知识,然后能在电脑上熟练利用,上网时候多看部分优异代码,看看她人怎么写,再结合自己不足之处进行更正。总
17、而言之,这次课设是是我记忆里一个新篇章,更是c语言编程上一个里程碑。 接着又是多种类型错误,很多是学艺不精结果,一个一个处理,时而还有道查一下单词。就这么实践是检验真理标准,在屡败屡战以后,迎来了成功花朵。然后我抓破破脑袋让我程序愈加合理和多功效。 我们已经学习了《C 语言程序设计》这门课,不过我所学知识最多也就是在做作业时候才会用到,平时没有什么练习机会,这次课程设计是我第一次经过自己构思,和同学讨论而且不停查阅资料来设计一项程序。这次设计,不仅巩固了我以前所学知识,还让我对c语言有了更深一步了解,掌握了更多技巧和技能。 C语言是计算机程序设计关键理论基础,在我们以后学习和工作
18、中全部有着十分关键地位。要学好这种语言,仅仅学习书本上知识是不够,还要常常自己动手,有较强实践能力。只有多动手,常常编写程序,才能发觉我们学习上漏洞和自己不足,并在实践中处理这些问题,不停提升自己转化知识能力。 在我有处理不了问题时,我会主动查阅相关资料,或向其它同学问询,这不仅丰富了我们知识,还促进了我们同学之间友谊。为了增大信息安全性,需要用文件来存放信息,因为我在上课时不重视对文件利用,所以在这方面有较大困难。我先将书本认认真真地看了一遍,又做了一下课后习题来验证和促进自己了解,最终,经过我们不懈努力,我程序有了突破,成功地实现了用文件来保留并查看学索赔信息。 这次设计中,我收获还有
19、就是学会了用步骤图来表示自己想法,并依据步骤图来逐步实现程序功效。开始时候,我画步骤图很是困难,需要一个多小时才能清楚依据自己想法画出图来,以后画多了,就愈加了解它功效,十分得心应手,能够比较快而正确画出来。 在这次课程设计中,我们首先对系统整体功效进行了构思,然后用结构化分析方法进行分析,将整个系统清楚划分为多个模块,再依据每个模块功效编写代码。而且尽可能将模块细分,最终在进行函数调用。我们在函数编写过程中,我们不仅用到了for循环、while循环和switch语句,还用到了函数之间调用(包含递归调用)。因为我们是分工编写代码,最终需要将每个人代码放到一起进行调试。在调试过程中也碰到了困难
20、但经过我耐心修改,最终功夫不负有心人,我成功了!
在这么一个过程中,我收获了很多在书本上根本学不到东西。了解到了自己不足之处,受益匪浅。
五.程序源代码
#include
21、 *********/ #define LEN sizeof(struct claim ) /*********************************************结构体定义 **************************************************************** *******/ struct claim { char num[20]; char name[50]; char Audit[30];
22、 char money[20]; char date[30]; char domain[30]; struct claim *next; }; /*****************************************全局变量及结构体指针定义 *********************************************************/ int info_flag,f=0; int flage=0; struct claim *head=NULL,*p,*p1,*p2,*p3;
23、 /*函数申明*/ void welcome(); /*欢迎函数*/ void input(); /*读取索赔信息*/ int menue() ; /*菜单函数*/ void find() ; /*按索赔编号查找索赔信息*/ void finddomain(); /*按底盘号查找索赔信息*/ void declared() ; /*按索赔编号删除索赔信息*/ void a
24、ddclaim() ; /*添加索赔信息*/ void change(); /*修改索赔信息*/ void writeInfo(); /*把链表内容写进文件*/ void keti(); /*题目*/ void miam(); /*密码*/ /************************************************************/ /*函数名:密码函数*/ /*功效描述:本函数用
25、于实现加密功效,目标是保护内部系统资料*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/ /*密码函数*/ void mima () { int n; char mima1[10]; char mima2[]={"123456"}; printf("\n\n\n\t\t\t密码有三次输入机会!!!"); for(n=1;n<=3;n++) { printf("\n\n\n\t\t\t请输入密码(123
26、456):"); scanf("%s",mima1); if(strcmp(mima1,mima2)!=0) { printf("\n\t\t\t密码错误,请重新输入!"); } else { system("cls"); return; } } printf("\n\t\t\t密码输入错误,按任意键退出"); exit(0); } /************************************************************/ /*函数名:主函数*/ /*功效描述:本函数用于实现调
27、用函数功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/ /*主函数*/ int main() { mima(); welcome(); while(1) { system("cls"); switch(menue()) { case 1: system("cls"); if(info_flag==1) {
28、 printf("信息已建立\n"); getch(); break; } else { input(); break; } case 2: system("cls"); find();break; case 3: system("cls"); finddomain();break; case 4: system("cls"); declared();break; case 5: system("cls"); addclaim();break; case 6: sy
29、stem("cls"); change();break; case 7: system("cls"); writeInfo();break; case 8: system("cls"); keti();break; case 0: return 0; default : { fflush(stdin); printf("\n 选择错误,请正确输入你选择(0~7),:\n"); printf("\n 任意键返回......\n"); fflush(stdin); getc
30、h(); system("cls"); } } } return 0; } /************************************************************/ /*函数名:课设题目*/ /*功效描述:本函数用于实现显示课设题目标功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/ /*课设题目*/ void keti() { p
31、rintf("9.汽车索赔管理程序\n"); printf("题目描述\n"); printf("已知在汽车销售后,服务站在对故障汽车维修后,能够向汽车生产厂家进行索赔,设计一个汽车索赔管理程序,以方便汽车生产厂家对汽车售后索赔进行管理,该程序完成以下功效:\n"); printf("(1)能从键盘输入索赔信息。\n"); printf("(2)指定索赔编号,显示索赔信息。\n"); printf("(3)指定底盘号,显示索赔历史。\n"); printf("(4)给定索赔编号,修改索赔信息。\n"); printf("(5)给定索赔编号,删除索赔信息。\n"); printf
32、"题目要求:\n"); printf("(1)根据分析、设计、编码、调试、测试软件过程完成这个应用程序。\n"); printf("(2)索赔信息包含:索赔编号、服务站名称、底盘号、审核人、索赔金额、索赔日期。\n"); printf("(3)为各项操作功效设计一个菜单,应用程序运行后,先显示这个菜单,然后用户经过菜单项选择期望进行操作项目。\n"); printf("输入要求:\n"); printf("(1)应用程序运行后在屏幕上显示一个菜单。用户能够依据需求,选定对应操作项目。进入每个操作后,依据应用程序提醒信息,从键盘输入对应信息。程序依据用户输入信息完成对应处理,实现要求
33、功效。\n"); printf("(2)能对输入数据进行简单校验,比如,维修日期必需是一个正当日期格式,索赔编号是唯一(一个索赔编号对应一次索赔索赔信息)\n"); printf("输出要求:\n"); printf(" (1)应用程序运行后,要在屏幕上显示一个菜单。\n"); printf("(2)要求用户输入数据时,给出清楚、明确提醒信息,包含输入数据内容、格式和结束方法等。\n"); printf("(3)在程序完成处理后,要清楚地给出程序处理结果。比如,在给定索赔编号删除索赔信息时,假如该索赔不存在,要提醒没能删除,假如删除成功要提醒删除成功。:\n"); printf("
34、实现要求:\n"); printf("(1)在程序中使用链表存放索赔信息。\n"); printf("(2)采取模块化程序设计方法,将程序中各项功效用函数实现。\n"); printf("扩展功效:\n"); printf("(1)提供部分统计功效。比如统计每个服务站索赔金额,依据审核人统计审核索赔次数。\n"); printf("(2)索赔信息从文件读入。\n"); printf("(3)将索赔信息保留到文件中。\n"); system("pause"); } /****************************************************
35、/ /*函数名:欢迎函数*/ /*功效描述:欢迎界面*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/ /*欢迎函数*/ void welcome() { system("color 8a"); printf("\n\n\n\n\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); p
36、rintf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ 欢 迎 使 用 汽 车 索 赔 管 理 系 统! ☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆
37、 \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ \t\t\t\t\t\t ☆☆\n"); printf("\t\t☆☆ 制 作 人:顾应洪 指 导 教 师:胡宁亚 ☆☆\n"); printf("\t\t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); printf("\t\t☆☆☆☆☆☆ 请 按 任 意 键 进 入 系 统☆☆☆☆☆☆☆☆☆☆ \n"); printf("\t\t☆☆
38、☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆\n"); fflush(stdin); getch(); system("cls"); return; } /************************************************************/ /*函数名:读取索赔信息*/ /*功效描述:本函数用于实现读取索赔信息功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/
39、 /*读取索赔信息*/ void input() { FILE *fp; int n=0; if((fp=fopen("c:\\索赔信息表.txt","r"))==NULL) { printf("cannot open this file:\n"); exit(0); } head=p1=(struct claim *)malloc(LEN); p1->next =NULL; while(!feof(fp))
40、 { fscanf(fp,"%s%s%s%s%s%s", p1->num,p1->name,p1->Audit,p1->money,p1->date,p1->domain); p2=(struct claim *)malloc(LEN); p1->next =p2; p3=p1; p1=p2; p1->next =NULL; } free(p2); p3->next=NULL; fclose(fp); info_flag=1; p1=head; printf("\t\t索赔信息以
41、下:\n\n\n"); while(p1!=NULL) { n=1; printf("\t\t索赔编号:%s\n",p1->num); printf("\t\t服务站名称:%s\n",p1->name); printf("\t\t审核人:%s\n",p1->Audit); printf("\t\t索赔金额:%s\n",p1->money); printf("\t\t索赔日期:%s\n",p1->date); printf("\t\t底盘号:%s\n",p1->domain); printf("\n\n"); p1=p1-
42、>next; } if(n==0) printf("\n\n\n\n\t\t\t没有索赔信息!!!"); getch(); } /************************************************************/ /*函数名:按索赔编号查找索赔信息*/ /*功效描述:本函数用于实现按索赔编号查找索赔信息功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /***********************************************************
43、/ /*按索赔编号查找索赔信息*/ void find() { char num[20]; p1=head; if(p1==NULL) { printf("数据库为空\n"); printf("任意键返回"); system("cls"); return; } printf("请输入要查找索赔编号"); scanf("%s",num); while(p1!=NULL) { if(strcmp(p1->num,num)==0
44、) { printf("\t\t索赔编号:%s\n",p1->num); printf("\t\t服务站名称:%s\n",p1->name); printf("\t\t审核人:%s\n",p1->Audit); printf("\t\t索赔金额:%s\n",p1->money); printf("\t\t索赔日期:%s\n",p1->date); printf("\t\t底盘号:%s\n",p1->domain); printf("\n\n"); break; } else p1
45、p1->next; } if(p1==NULL) printf("\n\n找不到索赔信息!!!!\n"); printf("\n 任意键返回......\n"); getch(); system("cls"); } /************************************************************/ /*函数名:按底盘号查找索赔信息*/ /*功效描述:本函数用于实现按底盘号查找索赔信息功效功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/
46、/************************************************************/ /*按底盘号查找索赔信息*/ void finddomain() { char domain[30]; p1=head; if(p1==NULL) { printf("\n\n数据库为空!!! \n"); printf("\n 任意键返回......\n"); getch(); system("cls");
47、 return ; } printf("\n\n 请输入底盘号:\n"); fflush(stdin); scanf("%s",domain); while(p1!=NULL) { if(strcmp(p1->domain,domain)==0) //查找底盘号 { printf("\t\t索赔编号:%s\n",p1->num); printf("\t\t服务站名
48、称:%s\n",p1->name); printf("\t\t审核人:%s\n",p1->Audit); printf("\t\t索赔金额:%s\n",p1->money); printf("\t\t索赔日期:%s\n",p1->date); printf("\t\t底盘号:%s\n",p1->domain); printf("\n\n"); f=1; //标志变量 } p1=p1->next; } if
49、f!=1) { printf("\n\n没有%s底盘号信息!!!\n",domain); printf("\n 任意键返回......\n"); getch(); system("cls"); //清屏 } else { printf("按任意键返回"); getch(); system("cls"); } } /*********************************************************
50、/ /*函数名:按索赔编号删除索赔信息*/ /*功效描述:本函数用于实现按索赔编号查找索赔信息功效*/ /*入口参数:无*/ /*出口参数:无*/ /*返回值:无*/ /************************************************************/ /*按索赔编号删除索赔信息*/ void declared() { char num[20] if(info_flag==0) { printf("未建立,数据库为空\n"); printf("任意键返回"); g






