用C语言编写一个车票管理系统

Python09

用C语言编写一个车票管理系统,第1张

1、首先打开CodeBlocks,新建一个空白文件。先定义头文件和主函数

2、定义所需要的变量,因为有除法,肯定会有小数出现,所以将变量定义为浮点型。

3、定义输入函数,将刚才的x和y定义为计算的变量,将c定义为选择计算方式的变量。scanf("%f%c%f",&x,&c,&y)。

4、添加switch函数,将c作为选择变量。

5、然后在主函数中输入一个输出函数来输出计算式及结果。

6、这时进行运行如图,计算正常。

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

# define size 10 struct t_tickets /* 定义结构体 */ {int number/* 结构体中的申明部分 */ char begin [10]char start[30]char loadend[30]float timeint peopleint booked } t[size] FILE*fp struct t_tickets t[size]

void save()

{

int iif ((fp=fopen("ticket.text","w+"))==NULL)

{

printf("cannot open the file\n")

return

}

for(i=0i<sizei++)

if(fwrite(&t[i],sizeof(struct t_tickets),1,fp)!=1)

printf(" file write error\n")

fclose(fp)

}

void input()

{

int i

printf("----------请录入班次信息----------\n")

for(i=0i<sizei++)

{

scanf("%d %s %s %s %f %d %d",&t[i].number,t[i].begin, t[i].start,t[i].loadend,&t[i].time,&t[i].people,&t[i].booked)

save()} }

void output()

{

int i

fp=fopen("ticket.text","r")for(i=0i<sizei++)

{

fread(&t[i],sizeof(struct t_tickets ),1,fp)printf("\n%-4d %-8s %-13s %-13s %-6.1f %-6d %4d\n",t[i].number,t[i].begin, t[i].start,t[i].loadend,t[i].time,t[i].people,t[i].booked)

}

fclose(fp)} void scan(){

int kint number

printf("请输入您想要查询的班次号:\n")

scanf("%d",&number)

fp=fopen("ticket.text","r")

for(k=0k<sizek++)

{

fread(&t[k],sizeof(struct t_tickets),1,fp)

if(number==t[k].number)

{printf("\n 班次发车时间 起点站 终点站 行车时间 额定载量 已订票人数 \n")

printf("\n%-4d %-8s %-13s %-13s %-6.1f %-6d %4d\n",t[k].number,t[k].begin, t[k].start,t[k].loadend,t[k].time,t[k].people,t[k].booked)

break

}

}

if(k>=size)

printf("对不起,没有您想要查询的班次,谢谢使用本系统\n")

fclose(fp)

} void check()

{

int ichar loadend[30]

printf("请输入你想要查询的终点站的名称:\n")

scanf("%s",loadend)

fp=fopen("ticket.text","r")

for(i=0i<sizei++)

{

fread(&t[i],sizeof(struct t_tickets),1,fp)

if(strcmp(loadend,t[i].loadend)==0)

{

printf("\n 班次 发车时间 起点站 终点站 行车时间 额定载量 已订票人数 \n") printf("\n%-4d %-8s %-13s %-13s %-6.1f %-6d %4d\n",t[i].number,t[i].begin, t[i].start,t[i].loadend,t[i].time,t[i].people,t[i].booked)

break

}

}

if(i>=size)

printf("对不起,没有您想要查询的班次,谢谢使用本系统!\n")

fclose(fp)

} void book(){

int iint numberint mchar loadend[30]int ticket=1

if ((fp=fopen("ticket.text","r"))==NULL)

{

printf("not open the file\n")

return

}

for(i=0i<=1i++)

fread(&t[i],sizeof(struct t_tickets),1,fp)

printf("\n请输入你想要到达的终点站:\n")

scanf("%s",loadend)

printf("到达此终点站的班次有:\n")

printf("\n 班次 发车时间 起点站 终点站 行车时间 额定载量 已订票人数 \n")

for(i=0i<=1i++)

if(strcmp(loadend,t[i].loadend)==0)

{

ticket=2

printf("\n 班次 发车时间 起点站 终点站 行车时间 额定载量 已订票人数 \n")

printf("\n%-4d %-8s %-13s %-13s %-6.1f %-6d %4d\n",t[i].number,t[i].begin, t[i].start,t[i].loadend,t[i].time,t[i].people,t[i].booked)

}

for(i=0i<=1i++)

if(strcmp (loadend,t[i].loadend)==0)

if(t[i].booked<t[i].people)

{

ticket=3

printf("请输入订票的张数:\n")

scanf("%d",&m)

for(i=0i<=sizei++)

if(number=t[i].number) if ((fp=fopen("ticket.text","w"))==NULL)

{

printf("not open the file\n")

return

}

{

t[i].booked=t[i].booked+m

if ((fp=fopen("ticket.text","w"))==NULL)

{

printf("not open the file\n")

return

}

for(i=0i<=sizei++) fwrite(&t[i],sizeof(struct t_tickets),1,fp)fclose(fp)

printf(" 您订票成功!谢谢使用本次服务!\n") }} if(ticket==1)

printf("\n 没有你查询的班次,请查询后在输入\n")

if(ticket==2)

printf("\n 你想要购买的票以售完,请购买下一班 \n") fclose(fp) if ((fp=fopen("ticket.text","w"))==NULL)

{

printf("not open the file\n")

return

} for(i=0i<=sizei++)

fwrite(&t[i],sizeof(struct t_tickets),1,fp) fclose(fp)

} void rback(){

int number,i,mif((fp=fopen("ticket.text","r"))==NULL)

{

printf("not open the file\n")

return

}for(i=0i<=1i++)

fread(&t[i],sizeof(struct t_tickets),1,fp)

printf("请输入退票的班次:\n")

scanf("%d",&number)

printf("请输入退票的张数:\n")

scanf("%d",&m)

for(i=0i<=sizei++)

if(number==t[i].number)

{

t[i].booked=t[i].booked-m

printf("\n 您退票成功!,谢谢\n")}

fclose(fp)if ((fp=fopen("ticket.text","w"))==NULL)

{

printf("not open the file\n")

return

}

for(i=0i<=sizei++) fwrite(&t[i],sizeof(struct t_tickets),1,fp)fclose(fp)

}

void over()

{

printf("\n 谢谢您的使用,请按任意键结束!\n")

return

}

void main(){

int b printf("这里是车票管理系统,欢迎你的使用\n")

printf(" 袁宏杰制作\n")

printf("\n******************************************\n")

printf(" ==== 0,录入班次信息\n")

printf(" ==== 1,浏览信息\n")

printf(" ==== 2,按班次查询\n")

printf(" ==== 3,按终点站查询\n")

printf(" ==== 4,预定车票\n")

printf(" ==== 5,退票\n")

printf(" ==== 6,退出程序\n")

printf("\n******************************************\n")

do{

printf("-----选择主菜单功能(0~6\n")

scanf("%d",&b)

switch (b)

{

case 0: input() break

case 1: output()break

case 2: scan() break

case 3: check() break

case 4: book() break

case 5: rback() break

case 6: over() break

default: printf(" enter error!\n")

}}while(1)}

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

#include<time.h>

#include<conio.h>

#define N 1000

typedef struct TICKET

{

char num[10]

char hour[3]

char min[3]

char from[10]

char to[10]

float hours

int max

int now

}CLASS

int class_num=0

CLASS records[N]

int system_time()

void NewMessage()

void ShowTable1()

void ShowTable2(int i)

void Display()

void add()

void save()

void load()

void search()

void change()

void quit()

void Ticketorder()

void Ticketdelete()

int menu_select()

int whether(int)

void find(char s1[],char s2[])

void deletemessage()

int findnum(char s1[])

void get(int,int)

char *menu[]={"*****************欢迎使用车票管理系统*****************",

"\n*******************MENU功能菜单***********************",

"\n 1. 录入班次 ",

"\n 2. 显示所有班次 ",

"\n 3. 查询班次 ",

"\n 4. 增加班次 ",

"\n 5. 售票 ",

"\n 6. 退票 ",

"\n 7. 修改班次 ",

"\n 8. 删除班次 ",

"\n 9. 退出 "}

/**主函数**/

void main()

{

system("cls")

while(1)

{

switch(menu_select())

{

case 1: NewMessage()break

case 2: Display()break

case 3: search()break

case 4: add()break

case 5: Ticketorder()break

case 6: Ticketdelete()break

case 7: change()break

case 8: deletemessage()break

case 9: quit()break

}

}

}

/**菜单函数**/

int menu_select()

{

char s[5]

int c,i

system("cls")

for(i=0i<11i++)

{

printf("%s",menu[i]))

}

i=0

printf("\n")

printf("******************************************************")

printf("\n请选择(1-9):")

scanf("%s",s)

c=atoi(s)

while(i<0||i>9)

{

printf("\n")

printf("******************************************************")

printf("\n请选择(1-9):")

scanf("%s",s)

c=atoi(s)

}

return c

}

void NewMessage()

{

int i=0,j=5,h

char s[5]

FILE *fp

system("cls")

if((fp=fopen("d:number.dat","rb"))!=NULL)

{

printf("车票信息已经存在请选择增加功能!\n")

printf("任意输入则返回菜单\n")

scanf("%s",s)

i=1//通过是1

}

if(i==0)

{

system("cls")

printf("请输入要录入班次总数:\n")

scanf("%d",&class_num)

system("cls")

for(i=0i<class_numi++)

{

system("cls")

printf("请输入第%d个班次信息:\n",i+1)

h=-1

for(h!=i)

{

printf("请输入班次:")

scanf("%s",records[i].num)

for(h=0h<ih++)

if(strcmp(records[h].num,records[i].num)==0)

//判断字符串比较是否相等,, 待比较的字符串

{

printf("输入错误!该班次已存在!\n")

break

}

}

get(i,j)

j=5

}

save()

}

}

void Display() //显示所有函数

{

int i,j

system("cls")//刷屏

load() // 调用按班次查询函数

ShowTable1() //线框调用1,,,不用每次输

for(i=0,j=0i<class_numi++,j+=2)/////按班次顺序输出

{

printf("\n|----------|----------|----------|----------|--------|--------|--------|\n")

if(whether(i))

printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,

records[i].min, records[i].from,records[i].to,records[i].hours,

records[i].max,records[i].now)

else

printf("|%10s| 已发车 |%10s|%10s|%8.1f|%8d|%8d|",records[i].num,

records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now)

}

ShowTable2(j) //线框调用2

printf("\n按任意键继续....\n")

getch() /////从控制台读取一个字符,但不显示在屏幕上

}

/**打印表头**/

void ShowTable1()

{

int i=2

system("cls")

printf("**************************车票信息系统**********************************\n")

printf("\n|----------|----------|----------|----------|--------|--------|--------|\n")

printf("\n| 班次 | 发车时间 | 起点站 | 终点站 |行车时间|额定载量| 已售票 |\n")

}

void ShowTable2(int i)

{

printf("\n|----------|----------|----------|----------|--------|--------|--------|\n")

}

void search()

{

int i

char s1[10]={'\0'},s2[10]={'\0'}

system("cls")

printf("1. 按班次查询\n")

printf("2. 按终点站查询\n")

printf("3. 退出\n")

printf("请选择(1-3):\n")

scanf("%d",&i)

load()

switch(i)

{

case 1: printf("请输入要查询的班次:")

scanf("%s",s1)

find(s1,s2)

break

case 2: printf("请输入要查询终点站:")

scanf("%s",s2)

find(s1,s2)

break

case 3: break

default : printf("输入错误!\n")

break

}

printf("按任意键继续....\n")

getch()

}

void find(char s1[],char s2[])

{

int i,h=0,m

ShowTable1()

if(s2[0]=='\0')

m=1

else m=0

for(i=0i<class_numi++)

if(strcmp(s1,records[i].num)==0||strcmp(s2,records[i].to)==0)

{

printf("\n|----------|----------|----------|----------|--------|--------|--------|\n")

printf("|%10s|%5s:%-4s|%10s|%10s|%8.1f|%8d|%8d|",records[i].num,records[i].hour,records[i].min,

records[i].from,records[i].to,records[i].hours,records[i].max,records[i].now)

h+=1

if(m==1)

break

}

ShowTable2(h)

if(h==0)

printf("要查找的班次不存在!\n")

}

/**增加函数**/

void add()

{

int i,j=5

load()

system("cls")

printf("1. 增加班次")

printf("2. 返回\n")

printf("请选择(1-2)\n")

scanf("%d",&i)

if(i==1)

{

system("cls")//刷屏

printf("1. 请输入要增加的班次:")

scanf("%s",records[class_num].num)

for(i=0i<class_numi++)

if(strcmp(records[class_num].num,records[i].num)==0)

//判断字符串比较是否相等,待比较的字符串,判断车次没重复

{

printf("输入错误!\n")

getch() /////从控制台读取一个字符,但不显示在屏幕上

break

}

if(i==class_num)

{

get(i,j) ////修改及增加班次*

class_num++ ///使班次数加1

save() //调用保存函数

}

}

}

/**售票函数**/

void Ticketorder()//*售票函数

{

int i

char num[10]

system("cls")//刷屏

printf("1. 售票\n")

printf("2. 返回\n")

printf("请选择(1-2):\n")

scanf("%d",&i)

if(i==1)

{

load() // 加载函数

search() //查找函数

printf("请输入要订票的班次(若无请输入0):")

scanf("%s",num)

for(i=0i<class_numi++)

if(strcmp(num,records[i].num)==0)//判断字符串比较是否相等,, 待比较的字符串

if(records[i].max>records[i].now&&whether(i)==1)

//判断时间是否超出函数并且没超出最大客量

{

records[i].now++ ///使已售票加1

printf("通向%s班次为%s的票订票成功!\n",records[i].to,records[i].num)

save()//调用保存函数

getch() /////从控制台读取一个字符,但不显示在屏幕上

break

}

else

{

printf("该班次已满或已发出!\n")

getch() /////从控制台读取一个字符,但不显示在屏幕上

}

}

}

/**退票函数**/

void Ticketdelete() //删除函数*

{

int i

char num[10]

system("cls")//刷屏

printf("1. 退票\n")

printf("2. 返回\n")

printf("请选择(1-2)\n:")

scanf("%d",&i)

if(i==1)

{

system("cls")//刷屏

load() // 调用按班次查询函数

printf("请输入要退票的班次:\n")

scanf("%s",num)

i=findnum(num) //调用班次查询函数

if(strcmp(num,records[i].num)==0) //判断字符串比较是否相等 待比较的字符串

if(whether(i)) //判断时间是否超出函数***

{

printf("确定(Y/N)?")

scanf("%s",num)

if(num[0]=='y'||num[0]=='Y')

{

records[i].now-- //使已售票减1

printf("退票成功!\n")

save()//调用保存函数

getch() //从控制台读取一个字符,但不显示在屏幕上

}

}

else

{

printf("该班车已发出,无法退票!\n")

getch() /////从控制台读取一个字符,但不显示在屏幕上

}

if(i==class_num)

{ printf("输入错误!\n")

getch() /////从控制台读取一个字符,但不显示在屏幕上

}

}

}

字数超了。。。。