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