C语言课程设计报告.docx
《C语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告.docx(20页珍藏版)》请在冰豆网上搜索。
![C语言课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/7/2f82a942-f4ec-4376-9e07-f4f24766af89/2f82a942-f4ec-4376-9e07-f4f24766af891.gif)
C语言课程设计报告
武汉科技大学
C程序设计
课程设计报告
设计题目:
汽车售票系统
学生姓名:
学号:
班级:
_电子信息工程0802班__
指导老师:
日期:
1.题目与要求
1.1问题提出:
计划编写一个汽车售票系统的程序,以帮助售票员完成汽车售票业务。
1.2本系统涉及的知识点:
结构体、数组、循环(for循环,while语句,switch语句等)、函数、分支、指针和文件的一些简单应用。
1.3功能要求:
(1)能够售票和退票,并以文件的形式保存当天各个车次的售退票情况。
◆售票功能
当查询出已订票人数小于额定载量且系统时间小于发车时间才能售票,自动更新已售票人数。
◆退票功能
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
(2)查询显示功能。
可以随时显示当前售票现状(如:
班次发车时间载客量已售票数余票等信息)。
(3)用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项。
可适当增加其他附加功能。
2.功能设计
2.1算法设计:
该程序要求具备“售票”、“退票”、“显示当前售票情况”、“保存当天数据”、“退出”5项功能。
首先编写一个menue函数,对这五项功能进行简要介绍。
对“售票”功能:
进入系统后,首先选择购票方式,输入汽车班次或发车时间后,即显示出售票情况。
对“退票”功能:
首先输入所退票的班次,在确认输入信息正确并且车未发出后则退票成功,并修改系统中的相关信息。
对“显示当前售票情况”功能:
将当前的售票情况按相应的格式输出。
对“保存当天数据”功能:
打开程序所在的文件,在文件中按相应格式输出对应的汽车班次情况,然后关闭文件。
通过“Cur_tim”函数获取系统当前时间。
2.2部分模块流程图
3.程序代码设计:
A·menue函数:
/*菜单项*/
voidmenue(void)
{
system("cls");/*清屏*/
printf("\t\t*售票系统*\n");
printf("\t1.售票\n");
printf("\t2.退票\n");
printf("\t3.显示当前售票情况\n");
printf("\t4.保存当天数据\n");
printf("\t5.退出\n");
printf("请选择:
");
}
B·售票函数:
/*售票*/
voidSell(structTickittickit[],intn)
{
intselect,flag=1,i,no,flag2=1,flag1=1,H,M;
system("cls");
printf("\t\t*售票系统*\n");
printf("售票:
按7退出\n");
printf("请选择购票方式:
5-按班次购票;6-按发车时间购票;按7退出:
");
scanf("%d",&select);/*等待用户选择购票方式*/
while(select!
=7)/*非退出*/
{
switch(select)
{
case5:
/*按班次售票*/
printf("请输入汽车班次:
");
scanf("%d",&no);
for(i=0;i<5;i++)/*遍历所有班次*/
{
if(no==tickit[i].No)/*捕获输入班次*/
{
intcount;charmin;
flag2=0;
if(Hour>tickit[i].Start_Time[0]||(Hour==tickit[i].Start_Time[0]&&Min>tickit[i].Start_Time[1]))/*已发出的班次不能购票*/
{
printf("对不起,该车已发出。
不能购票.\n");
break;
}
printf("%d\n",tickit[i].No);
printf("详细信息:
\n");
min=change(tickit[i].Start_Time[1]);
printf("班次\t发车时间\t载客量\t已售\n");
printf("%d\t%d:
%c%d\t\t%d\t%d\n",tickit[i].No,tickit[i].Start_Time[0],min,tickit[i].Start_Time[1],tickit[i].Pasenger_Total,tickit[i].Sold_Ticklts);
printf("请输入购票数量:
");scanf("%d",&count);
if(tickit[i].Sold_Ticklts+count<=tickit[i].Pasenger_Total)
{
printf("确认购买?
y/n\n");
if(_getch()=='y'||_getch()=='Y')
{
tickit[i].Sold_Ticklts+=count;/*购买成功,已售票额更新*/
printf("购买成功!
\n");
}
else
{
printf("票额不足!
\n");
}
}
break;
}
}
if(flag2)printf("该班次不存在,请核对后购买!
\n");
break;
case6:
/*按发车时间来购票(基本思路同上)*/
printf("友情提示:
汽车时间表:
\n");
printf("06:
40\t09:
30\t12:
00\t14:
30\t16:
00\n");
printf("请输入发车时间(时分格式):
");
scanf("%d%d",&H,&M);
for(i=0;i<5;i++)
{
if(H==tickit[i].Start_Time[0]&&M==tickit[i].Start_Time[1])
{
intcount;charmin;
flag1=0;
if(Hour>tickit[i].Start_Time[0]||(Hour==tickit[i].Start_Time[0]&&Min>tickit[i].Start_Time[1]))
{
printf("对不起,该车已发出。
不能购票.\n");
break;
}
printf("详细信息:
\n");
min=change(tickit[i].Start_Time[1]);
printf("班次\t发车时间\t载客量\t已售\n");
printf("%d\t%d:
%c%d\t\t%d\t%d\n",tickit[i].No,tickit[i].Start_Time[0],min,tickit[i].Start_Time[1],tickit[i].Pasenger_Total,tickit[i].Sold_Ticklts);
printf("请输入购票数量:
");scanf("%d",&count);
if(tickit[i].Sold_Ticklts+count<=tickit[i].Pasenger_Total)
{
printf("确认购买?
y/n\n");
if(_getch()=='y'||_getch()=='Y')
{
tickit[i].Sold_Ticklts+=count;printf("购买成功!
\n");
}
else
{
printf("票额不足!
\n");
}
}
break;
}
}
if(flag1)printf("该时间班次不存在,请核对后购买!
\n");
break;
default:
printf("操作错误!
\n");
}
printf("请选择购票方式:
5-按班次购票;6-按发车时间购票;按7退出:
");
scanf("%d",&select);
}
}
C·退票函数:
/*退票*/
voidBack(structTickittickit[])
{
intno;
system("cls");
printf("\t\t*售票系统*\n\n\t\t退票:
\n");
printf("请输入所退车票班次:
");
scanf("%d",&no);/*接收用户输入退票班次*/
if(Hour>tickit[no].Start_Time[0]||(Hour==tickit[no].Start_Time[0]&&Min>tickit[no].Start_Time[1]))/*已发出的班次不能退*/
{
printf("对不起,该车已发出。
不能退票.\n");
}
else
{
intcount;
printf("请输入退票数额:
");
scanf("%d",&count);
/*更新*/
tickit[no-1].Sold_Ticklts-=count;
tickit[no-1].Back_count+=count;
printf("退票成功!
");
}
printf("按任意键继续.....");
_getch();
}
/*显示当前*/
voidShow_Curr(structTickittickit[],intn)
{
inti;
system("cls");
printf("\t\t*售票系统*\n当前票额信息:
\n");
printf("班次\t发车时间\t载客量\t已售\n");
for(i=0;i{
charmin;
min=change(tickit[i].Start_Time[1]);
printf("%d\t%d:
%c%d\t\t%d\t%d\n",tickit[i].No,tickit[i].Start_Time[0],min,tickit[i].Start_Time[1],tickit[i].Pasenger_Total,tickit[i].Sold_Ticklts);
}
printf("按任意键退出.....");
_getch();
}
D·保存当日数据save函数:
/*保存当日数据*/
voidSave(structTickittickit[],intn)
{
inti;
FILE*p;
p=fopen("Tickit.txt","w");/*文件指针。
以“写”的方式打开文件“Tickit.txt”,不存在则创建*/
/*开始写入数据*/
fprintf(p,"售票情况:
\n");
fprintf(p,"班次\t发车时间\t载客量\t已售\t曾退票数\n");
for(i=0;i{
charmin;
min=change(tickit[i].Start_Time[1]);
fprintf(p,"%d\t%d:
%c%d\t\t%d\t%d\t%d\n",tickit[i].No,tickit[i].Start_Time[0],min,tickit[i].Start_Time[1],tickit[i].Pasenger_Total,tickit[i].Sold_Ticklts,tickit[i].Back_count);
}
/*写入结束*/
printf("保存成功!
");
_getch();
fclose(p);/*关闭已打开的文件*/
}
E·加载车票信息load函数:
/*加载车票信息*/
voidLoad(structTickittickit[])
{
inti;
for(i=1;i<=5;i++)/*初始化结构体数组*/
{
tickit[i-1].No=i;
tickit[i-1].Sold_Ticklts=0;
tickit[i-1].Back_count=0;
}
/*开始加载*/
tickit[0].Start_Time[0]=6;
tickit[0].Start_Time[1]=40;
tickit[1].Start_Time[0]=9;
tickit[1].Start_Time[1]=30;
tickit[2].Start_Time[0]=12;
tickit[2].Start_Time[1]=0;
tickit[3].Start_Time[0]=14;
tickit[3].Start_Time[1]=30;
tickit[4].Start_Time[0]=16;
tickit[4].Start_Time[1]=0;
tickit[0].Pasenger_Total=tickit[4].Pasenger_Total=50;
tickit[1].Pasenger_Total=tickit[2].Pasenger_Total=tickit[3].Pasenger_Total=40;
/*结束*/
}
4.C程序设计总结:
这一次的C程序设计让我的C语言驾驭能力有了很大的提高。
从对老师给我们的课题目瞪口呆,到逐渐深入学习探索,再到不断修改调试程序,最后达到标准状态,整个过程中我学习了很多原来没有接触过的C语言知识,比如如何清屏,如何调用系统时间,同时也对很多原来不是很熟悉的知识进行了更深入的学习,比如结构体知识。
在编写程序的过程中,我也比较粗心,常常把字母,单词拼错,导致一些小的错误。
这些小的错误在程序设计过程中是完全可以避免的。
同时,在编程过程中,我深刻的意识到作为一名编程人员,耐心和细心是必不可少的优秀品质,通过本次设计,我的细心程度有所提高,也更加锻炼了做事耐心的优秀品质。
我还从总学到了一种比较高效的学习方法,就是理论与实践相结合的学习方法。
只有在理论的基础上加以实践,加以感受,才能更好的理解理论知识,才能更好的掌握需要学习的知识,从而更好的运用。
参考文献
[1]谭浩强,C程序设计(第二版),北京:
清华大学出版社,2007.1
[2]陈朔鹰,C语言程序设计习题集,北京:
人民邮电出版社,2003.6
附录:
程序清单:
#include
#include
#include
#include
#include
/*存储车票信息*/
structTickit
{
intNo;/*车票编号*/
intStart_Time[2];/*发车时间*/
intPasenger_Total;/*最大票额*/
intSold_Ticklts;/*已售票额*/
intBack_count;/*退票数额*/
};
voidmenue(void);/*菜单项*/
voidSell(structTickittickit[],intn);/*售票模块*/
voidBack(structTickittickit[]);/*退票模块*/
voidShow_Curr(structTickittickit[],intn);/*显示当日信息*/
voidSave(structTickittickit[],intn);/*文件存盘.txt文件格式*/
voidLoad(structTickittickit[]);/*加载车票信息*/
voidCur_Tim();/*获取系统当前时间*/
charchange(intn);/*转化输出*/
#defineN5/*定义车票种类数*/
intHour,Min;/*全局变量,保存系统当前的时间*/
voidmain(void)
{
intselect;
structTickittickit[N];
Load(tickit);/*加载车票*/
Cur_Tim();/*获取系统时间*/
menue();/*显示菜单*/
scanf("%d",&select);/*等待用户选择功能*/
while(select!
=5)/*选择为非退出*/
{
intflag=1;
switch(select)/*根据用户选择进入相应模块*/
{
case1:
Sell(tickit,N);
break;
case2:
Back(tickit);
break;
case3:
Show_Curr(tickit,N);
break;
case4:
Save(tickit,N);
break;
default:
printf("您的输入有误,请重新输入:
");
flag=0;
}
if(flag)
{
menue();
scanf("%d",&select);
}
else
scanf("%d",&select);
}
}
/*菜单项*/
voidmenue(void)
{
system("cls");/*清屏*/
printf("\t\t*售票系统*\n");
printf("\t1.售票\n");
printf("\t2.退票\n");
printf("\t3.显示当前售票情况\n");
printf("\t4.保存当天数据\n");
printf("\t5.退出\n");
printf("请选择:
");
}
/*售票*/
voidSell(structTickittickit[],intn)
{
intselect,flag=1,i,no,flag2=1,flag1=1,H,M;
system("cls");
printf("\t\t*售票系统*\n");
printf("售票:
按7退出\n");
printf("请选择购票方式:
5-按班次购票;6-按发车时间购票;按7退出:
");
scanf("%d",&select);/*等待用户选择购票方式*/
while(select!
=7)/*非退出*/
{
switch(select)
{
case5:
/*按班次售票*/
printf("请输入汽车班次:
");
scanf("%d",&no);
for(i=0;i<5;i++)/*遍历所有班次*/
{
if(no==tickit[i].No)/*捕获输入班次*/
{
intcount;charmin;
flag2=0;
if(Hour>tickit[i].Start_Time[0]||(Hour==tickit[i].Start_Time[0]&&Min>tickit[i].Start_Time[1]))/*已发出的班次不能购票*/
{
printf("对不起,该车已发出。
不能购票.\n");
break;
}
printf("%d\n",tickit[i].No);
printf("详细信息:
\n");
min=change(tickit[i].Start_Time[1]);
printf("班次\t发车时间\t载客量\t已售\n");
printf("%d\t%d:
%c%d\t\t%d\t%d\n",tickit[i].No,tickit[i].Start_Time[0],min,tickit[i].Start_Time[1],tickit[i].Pasenger_Total,tickit[i].Sold_Ticklts);
printf("请输入购票数量:
");scanf("%d",&count);
if(tickit[i].Sold_Ticklts+count<=tickit[i].Pasenger_Total)
{
printf("确认购买?
y/n\n");
if(_getch()=='y'||_getch()=='Y')
{
tickit[i].Sold_Ticklts+=count;/*购买成功,已售票额更新*/
printf("购买成功!
\n");
}
else
{
printf("票额不足!
\n");
}
}
break;
}
}
if(flag2)printf("该班次不存在,请核对后购买!
\n");
break;
case6:
/*按发车时间来购票(基本思路同上)*/
printf("友情提示:
汽车时间表:
\n");
printf("06:
40\t09:
30\t12:
00\t14:
30\t16:
00\n");
printf("请输入发车时间(时分格式):
");
scanf("%d%d",&H,&M);
for(i=0;i<5;i++)
{
if(H==tickit[i].Start_Time[0]&&M==tickit[i].Start_Time[1])
{
intcount;charmin;
flag1=0;
if(Hour>tickit[i].Start_Time[0]||(Hour==tickit[i].Start_Time[0]&&Min>tickit[i].Start_Time[1]))
{
printf("对不起,该车已发出。
不能购票.\n");
break;
}
printf("详细信息:
\n");