《C语言程序设计》课程设计
公交IC卡管理系统
运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计提高学生综合运用所学知识来解决实际问题及进行科学实验或技术设计的初步能力。
对于本课程设计而言重点在熟悉C语言基本语法规范以及灵活运用C语言编程解决实际问题。
二需求分析
1、该程序主要为实现某公交公司关于公交IC卡的管理,首先应包括基本卡号及其相关信息(如卡号所对应的初始金额)的录入系统;
2、应拥有用户乘车处理系统,即记录用户乘车明细(如乘车日期,所称车辆)并实现将乘车费用在相应卡上进行扣除;
3、当某卡余额不足时,用户可对其进行充值以实现长久使用;
4、应具有查询功能,即输入某一卡号,便可对该卡内余额,扣费明细进行查询;
5、以上功能以菜单方式出现并执行。
三概要设计
1、主函数模块
定义一个结构体组,用来储存IC卡信息
typedefstructinformation
charcardnumber[11];/卡号/floatbalance;/余额/longdate[N];/乘车日期/intbusnumber[N];/所乘车/floate_penses[N];/费用/
}INFORMATION;
main()
定义变量及对其进行初始化;
利用do-while循环执行菜单;
将调用函数插入菜单中;
由键盘录入来确定循环是否继续;
《C语言程序设计》课程设计
2、被调用函数模块
①intInputInformation(INFORMATIONinf[])
/函数功能:基本信息包括卡号(只允许录入十位卡号)和初始金额的录入函数参数:inf为结构体组
函数返回值:录入卡号个数
定义变量及其初始化;
利用do-while进行基本信息即卡号(只允许录入十位)及初始金额的录入,并记录每位卡号所对应的下标值;
由键盘录入的字符来确定是否停止对该函数的调用;
返回录入的卡号个数;
②intProcessingService(INFORMATIONinf[],inti,floatp)
/函数功能:乘车明细输入以及对帐户进行扣费处理,若余额不足则进行提示函数参数:inf为结构体组,i为所输卡号对应下标值,p为账户余额地址函数返回值:乘车次数
定义变量及其初始化;
在主函数中输入卡号并调用查找函数找到该卡号所对应下标值传值给该函数;记录该卡号的扣费明细;
当卡内余额不足时不予以扣费并提示尽快充值;
由键盘录入的字符来确定是否停止对该函数的调用;
③voidRecharge(INFORMATIONinf[N],intn,floatp)
/函数功能:输入用户卡号及充值金额进行充值
函数参数:inf为结构体组,n为录入卡号总数,p为账户余额地址
函数返回值:无
定义变量及其初始化;
在主函数中输入卡号并调用函数找到该卡号对应余额地址传值给该函数;由键盘录入用户想要充值的金额并进行充值;
④voidInquiryBusiness(INFORMATIONinf[],intn,intm)
/函数功能:性息查询,用户输入卡号,程序打印相关信息
函数参数:inf为结构体组,n为录入卡号总数,m为乘车次数
函数返回值:无
《C语言程序设计》课程设计
定义变量及其初始化;
输入卡号并调用查找函数找到该卡号所对应下标值;
打印出有关该卡号的信息;
⑤intLinsearch(INFORMATIONinf[N],char_[],intn)
/函数功能:运用线性查找法查找用户输入的卡号
函数参数:inf为结构体组,_为用户输入的卡号,n为录入卡号总数
函数返回值:若找到则返回其下标值,找不到则返回-1
定义变量及其初始化;
输入卡号并调用查找函数找到该卡号所对应下标值并返回给调用函数;
⑥intInputInformationTwo(INFORMATIONinf[],intn)
/函数功能:第二次及其以后再次录入基本信息
函数参数:inf为结构体组,n为录入卡号总数
函数返回值:录入卡号个数
定义变量及其初始化;
利用do-while进行基本信息即卡号(只允许录入十位)及初始金额的录入,并记录每位卡号所对应的下标值;
由键盘录入的字符来确定是否停止对该函数的调用;
返回录入的卡号个数;
整个程序的流程图如下所示:
《C语言程序设计》课程设计
/主题:公交IC卡管理系统功能:基本信息包括卡号,初始金额的录入;输入卡号进行乘车扣费,充值,乘车明细答应
编程语言:C
include
include
include
defineN100
typedefstructinformation
charcardnumber[11];/卡号/floatbalance;/余额/
《C语言程序设计》课程设计
longdate[N];/乘车日期/
intbusnumber[N];/所乘车/
floate_penses[N];/费用/
}INFORMATION;
intInputInformation(INFORMATIONinf[]);
intInputInformationTwo(INFORMATIONinf[],intn);
voidRecharge(INFORMATIONinf[],intn,floatp);
intLinsearch(INFORMATIONinf[N],char_[],intn);
voidInquiryBusiness(INFORMATIONinf[],intn,intm);
intProcessingService(INFORMATIONinf[],inti,floatp);
intmain()
intorder;
intn;/录入卡号的个数/
inti;/用户输入查找卡号的返回下标值/
intj;/某卡号记载的乘车明细的下标值/
char_[11];
INFORMATIONinf[N];
printf("Enter1toinputthebasicinformation ");
printf("Enter2toentertoprocessingservice ");
printf("Enter3torecharge ");
printf("Enter4toinquirybusiness ");
printf("Enter5tostoptheprogram ");
printf("Inputthenumberwhichyouchoose ");
scanf("%d",order);
}while(order!=1order!=2order!=3order!=4order!=5);if(order==1)
n=InputInformation(inf);
printf("Thereare%dcards ",n);
elseif(order==2||order==3||order==4)
printf("Pleasechoose1andinputthebasicinformation ");scanf("%d",order);
}while(order!=1);
n=InputInformation(inf);
printf("Thereare%dcards ",n);
else
e_it(0);
《C语言程序设计》课程设计
printf("Enter1toinputthebasicinformation ");
printf("Enter2toentertoprocessingservice ");
printf("Enter3torecharge ");
printf("Enter4toinquirybusiness ");
printf("Enter5tostoptheprogram ");
printf("Inputthenumberwhichyouchoose ");
scanf("%d",order);
}while(order!=1order!=2order!=3order!=4order!=5);if(order==1)
n=InputInformationTwo(inf,n);
printf("Thereare%dcards ",n);
if(order==2)
printf("inputyourcardnumber ");
scanf("%s",_);
i=Linsearch(inf,_,n);
}while(i==-1);
j=ProcessingService(inf,i,inf[i].balance);/j为乘车次数/
if(order==3)
printf("inputyourcardnumber ");
scanf("%s",_);
i=Linsearch(inf,_,n);
}while(i==-1);
Recharge(inf,n,inf[i].balance);
if(order==4)
InquiryBusiness(inf,n,j);
}while(order!=5);
return0;
/输入用户卡号及充值金额进行充值,无返回值/
voidRecharge(INFORMATIONinf[N],intn,floatp)
floatmoney;
printf("yourcard'sbalanceis%.2f ",p);
《C语言程序设计》课程设计
printf("Howmuchmoneydoyouwanttorecharge ");
scanf("%f",money);
}while(money<0);
p=p+money;
printf("yourcard'sbalanceis%.2f ",p);
/基本信息包括卡号(只允许录入十位卡号)和初始金额的录入,并返回录入卡号个数/
intInputInformation(INFORMATIONinf[])
intdigit;
inti,j,a;
charreply;
i=-1;
i++;
digit=0;
printf("inputthecardnumber ");
scanf("%s",inf[i].cardnumber);
for(j=0;inf[i].cardnumber[j]!='