‘壹’ 飞机订票系统设计 c语言
(已修改,请用最新的代码)代码说明:
1级菜单:选择购买的航班号,并显示对应座位状态。
(我只做测试,所以初始化initFlight函数中我只初始了2个航班,需要自己按照我的代码添)
(注意:实际开发软件,链表数据是从数据库中读取的,需要实时同步,如果要多次调用initFlight函数,记得自己写一个释放内存的函数,把所有链表“SINFO和FLINFO”节点都释放掉,释放函数我没写,需要你自己写!!!)
2级菜单:选择购买对应座位号,完成购买,并实时显示购买结果。
位置编号、座位最大排数、舱室类型、折扣等参数均由常量参数空值,需要修改自行改常量。
注意:舱室类型(我默认3个类型头等舱、公务舱、经济舱)对应折扣参数:tDiscount二维数组。如要如要添加新的舱室类型,必须将参数常量TYPESIZE、typeName、types、tDiscount这4个同时修改,具体看代码备注!!
座位票价=基础票价*类型折扣*时段折扣。
因为飞机不让吸烟,所以我没做吸烟区(笑),如果你需要,可以作为类型自行添加!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<malloc.h>
#include<time.h>
//-----------------------相关参数,想改变,在这里修改!!!!!!!-----------------------------
constfloattimeDiscount=1;//时段折扣,影响所有航班最终价格,默认1
constcharcID[5]="ABCD";//位置编号
constintmaxRow=20;//位置最大排号
//注意:如果修改类型数量,types和tDiscount必须同时修改!!!
#defineTYPESIZE3//类型数量
constchartypeName[TYPESIZE][10]={"头等舱","公务舱","经济舱"};
constinttypes[TYPESIZE][2]={{1,2},{3,4},{5,20}};//排号对应类型。1~2排头等舱,3~4排公务舱,5~20排经济舱
constfloattDiscount[TYPESIZE]={1.5,1.3,1};//类型折扣。头等舱1.5倍,公务舱1.3倍,经济舱1倍
//-------------------------------------------------------------------------------
typedefstructseatInfo//座位信息,一条链表对应一个航班信息,链表顺序从第一排左边第一个开始往后A1~D1,A2~D2。。。
{
charcloID;//位置编号A、B、C、D
introw;//位置排号
inttype;//座位所属类型:0:头等舱、1:公务舱、2:经济舱,不同类型对应不同的类型折扣tDiscount
intsell;//出售状态,0:未出售;1:已出售
structseatInfo*next;
}SINFO;
typedefstructflightInfo//航班信息
{
charfid[10];//航班号
time_ttfTime;//起飞时间
time_tldTime;//降落时间
chartoCity[20];//抵达城市
floattPrice;//基础票价,不同位置具有不同折扣,座位票价=基础票价*类型折扣*时段折扣
structflightInfo*next;
structseatInfo*sHead;//对应座位链表的头节点
}FLINFO;
voidmeError(void*p);
SINFO*getSINFO();//获取座位链表
//addFLINFO:添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew);//返回尾节点
time_tgetTime_tfromStr(char*sTime);//将YYYY-MM-DDhh:mm:ss格式的时间字符串转换成time_t型数值
FLINFO*initFlight();//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
char*getTString(structtm*tm0);//通过tm获取时间字符串
voidshowSinfo(FLINFO*flinfo);//显示航班对应座位信息
voidprintfFlinfo(FLINFO*flinfoHead);
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid);//选择航班号,返回节点
voidshowSinfo(FLINFO*flinfo);//显示航班对应座位信息
SINFO*selectSinfo(FLINFO*flinfo,char*sid);//选择座位,返回节点
intmain()
{
FLINFO*flinfoHead=initFlight(),*ffSelect=NULL;
SINFO*sfSelect=NULL;
charfid[10]={0},sid[10]={10};
while(1)
{
ffSelect=NULL;
sfSelect=NULL;
memset(fid,0,10);
memset(sid,0,10);
printfFlinfo(flinfoHead);
printf("请输入要购买的航班号:");
scanf("%s",fid);
ffSelect=selectFlinfo(flinfoHead,fid);
if(!ffSelect)
{
printf("未找到对应航班,按任意键继续-----
");
getch();
system("cls");
continue;
}
system("cls");
printf("航班号:%s座位信息如下:
",ffSelect->fid);
showSinfo(ffSelect);
printf("请输入要购买的座位编号(输入0返回主菜单):");
scanf("%s",sid);
if(!strcmp(sid,"0"))
{
system("cls");
continue;
}
else
{
sfSelect=selectSinfo(ffSelect,sid);
if(!sfSelect||sfSelect->sell)
{
printf("未找到对应座位或该座位已出售,请重新输入!按任意键继续-----
");
getch();
system("cls");
continue;
}
printf("购买成功!按任意键继续-----");
sfSelect->sell=1;
getch();
system("cls");
}
}
return0;
}
SINFO*selectSinfo(FLINFO*flinfo,char*sid)//选择座位,返回节点
{
SINFO*sinfoHead=flinfo->sHead;
while(sinfoHead->next)
{
if(sinfoHead->next->cloID==sid[0]&&sinfoHead->next->row==atoi(sid+1))
returnsinfoHead->next;
sinfoHead=sinfoHead->next;
}
returnNULL;
}
voidshowSinfo(FLINFO*flinfo)//显示航班对应座位信息
{
SINFO*sinfoHead=flinfo->sHead,*sfp=NULL;
inti,j,k,row=maxRow,clo=strlen(cID);
chartypeStr[10]={0};
for(i=0;i<row;i++)
{
//---------读取座位所属舱室------------
memset(typeStr,0,10);
for(k=0;k<TYPESIZE;k++)
if(i+1>=types[k][0]&&i+1<=types[k][1])
strcpy(typeStr,typeName[k]);
//--------------------------------------
printf("
");
for(j=0;j<clo;j++)
printf("-------------");
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c%02d|",sfp->next->cloID,sfp->next->row);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%c|",sfp->next->sell?2:1);
sfp=sfp->next;
}
printf("
");
sfp=sinfoHead;
for(j=0;j<clo;j++)
{
printf("|%6s:%4.0f|",typeStr,flinfo->tPrice*tDiscount[sfp->next->type]*timeDiscount);
sfp=sfp->next;
}
printf("
");
sinfoHead=sfp;
}
for(j=0;i<clo;j++)
printf("-------");
printf("
");
}
FLINFO*selectFlinfo(FLINFO*flinfoHead,char*fid)//选择航班号,返回节点
{
while(flinfoHead->next)
{
if(!strcmp(flinfoHead->next->fid,fid))
returnflinfoHead->next;
flinfoHead=flinfoHead->next;
}
returnNULL;
}
voidprintfFlinfo(FLINFO*flinfoHead)
{
while(flinfoHead->next)
{
printf("目的地:%s,航班号:%s
----起飞时间:%s,抵达时间:%s
",flinfoHead->next->toCity,flinfoHead->next->fid,getTString(localtime(&flinfoHead->next->tfTime)),getTString(localtime(&flinfoHead->next->ldTime)));
flinfoHead=flinfoHead->next;
}
}
char*getTString(structtm*tm0)//通过tm获取时间字符串
{
char*str=(char*)malloc(sizeof(char)*20),num[5]={0};
meError(str);
memset(str,0,20);
sprintf(num,"%4d",tm0->tm_year+1900);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mon);
strcat(str,num);
strcat(str,"-");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_mday);
strcat(str,num);
strcat(str,"");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_hour);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_min);
strcat(str,num);
strcat(str,":");
memset(num,0,5);
sprintf(num,"%02d",tm0->tm_sec);
strcat(str,num);
returnstr;
}
time_tgetTime_tfromStr(char*sTime)//将YYYY-MM-DDhh:mm:ss格式的时间字符串转换成time_t型数值
{
time_trt;
structtm*tm1=NULL;
rt=time(NULL);
tm1=localtime(&rt);
sscanf(sTime,("%4d-%2d-%2d%2d:%2d:%2d"),&tm1->tm_year,&tm1->tm_mon,&tm1->tm_mday,&tm1->tm_hour,&tm1->tm_min,&tm1->tm_sec);
tm1->tm_year-=1900;
tm1->tm_mon--;
rt=mktime(tm1);
returnrt;
}
FLINFO*initFlight()//初始化航班信息,返回航班链表头节点,如果想手动输入,请在这里添加!!!正常软件开发,这一步应该是从数据库读取!
{
FLINFO*ffHead=NULL,*flinfoTail=NULL,fNew;
//--------添加一个航班信息----需要增加按照我下面调用方式写--------------------------------
strcpy(fNew.fid,"CI502");
fNew.tfTime=getTime_tfromStr("2019-02-2003:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2005:20:30");
strcpy(fNew.toCity,"台北");
fNew.tPrice=1000;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
//--------------------------------------------------------------------------------------------
strcpy(fNew.fid,"9C8921");
fNew.tfTime=getTime_tfromStr("2019-02-2014:30:30");
fNew.ldTime=getTime_tfromStr("2019-02-2016:40:30");
strcpy(fNew.toCity,"香港");
fNew.tPrice=500;
fNew.next=NULL;
flinfoTail=addFLINFO(&ffHead,flinfoTail,fNew);
returnffHead;
}
FLINFO*addFLINFO(FLINFO**ffHead,FLINFO*flinfoTail,FLINFOfNew)//返回尾节点
//添加航班信息链表的节点flinfoHead:头节点(第一次传NULL会自动生成),flinfoTail:尾节点,fNew:要添加的结构信息(成员指针无需赋值)
{
FLINFO*flinfoHead=*ffHead;
if(flinfoHead==NULL)
{
*ffHead=(FLINFO*)malloc(sizeof(FLINFO));
flinfoHead=*ffHead;
meError(flinfoHead);
flinfoHead->next=NULL;
}
FLINFO*flinfoNew=(FLINFO*)malloc(sizeof(FLINFO));
meError(flinfoNew);
flinfoNew->next=NULL;
flinfoNew->fid[0]=0;
strcpy(flinfoNew->fid,fNew.fid);
flinfoNew->ldTime=fNew.ldTime;
flinfoNew->tfTime=fNew.tfTime;
flinfoNew->toCity[0]=0;
strcpy(flinfoNew->toCity,fNew.toCity);
flinfoNew->tPrice=fNew.tPrice;
flinfoNew->sHead=getSINFO();
if(flinfoHead->next==NULL)
flinfoHead->next=flinfoNew;
else
flinfoTail->next=flinfoNew;
flinfoTail=flinfoNew;
returnflinfoTail;
}
SINFO*getSINFO()//获取座位链表
{
intmaxClo=strlen(cID),cnt=maxClo*maxRow,clo=0,row=1,i;
SINFO*sinfoHead=(SINFO*)malloc(sizeof(SINFO)),*sinfoTail=NULL;
meError(sinfoHead);
sinfoHead->next=NULL;
SINFO*sinfoNew=NULL;
while(cnt--)//按顺序生成对应数量的座位链表
{
if(clo==maxClo)
clo=0,row++;
if(row==maxRow+1)
row=1;
sinfoNew=(SINFO*)malloc(sizeof(SINFO));
meError(sinfoNew);
sinfoNew->cloID=cID[clo];
sinfoNew->row=row;
for(i=0;i<TYPESIZE;i++)
if(row>=types[i][0]&&row<=types[i][1])
{
sinfoNew->type=i;
break;
}
sinfoNew->sell=0;
sinfoNew->next=NULL;
if(sinfoHead->next==NULL)
sinfoHead->next=sinfoNew;
else
sinfoTail->next=sinfoNew;
sinfoTail=sinfoNew;
clo++;
}
returnsinfoHead;
}
voidmeError(void*p)//内存申请失败
{
if(p==NULL)
{
printf("
异常:内存申请失败!回车结束程序!
");
while(getch()!='
');
exit(0);
}
}
‘贰’ 自助缴费系统 是b/s 还是C/S,比如移动营业厅的自助缴费系统是什么语言写的用B/S可以实现这样的功能不
可以 asp jsp php 都可以
‘叁’ 什么是自助缴费系统
简单说好不
在字眼上面的看法 就是自动缴费的一个软件或者机器
举个例子:收费停车场
它包括IC会员卡、会员管理软件、刷卡进入\出自动门(用词不准确 参考)
会管理软件上面可以开通会员IC卡、设置收费标准、充值缴费
而IC卡在进入停车场的时候要刷卡进入,出门的时候也要刷卡。进门是记录时间,出门是统计时间并结合会员管理软件上面设定的收费标准来扣费。
像这类在很多场所都可以看到 如:停车场、网吧、公交车、POS机、自动柜员机
你是需要这样的代码吗?
你是需要B/S模式的还是C/S模式的?
这些功能写起来比较简单,在后台连个数据库,做些数据的处理就可以了。不过要我这没有现成的,要自己的写的话估计没有时间了。如果你是在学习java的话,建议你自己动手写写,这个小系统能用到好多东西。
简单点的话直接用JDBC边数据库,要是好点可以考虑使用Hibernate,如果写成B/S模式的话,还可以考虑使用一些MVC的框架,struts或者spring,前台还能使用到ajax.当然,你还需要打印报表的功能,这个也是一个难点。
‘伍’ 模拟自助缴费查询系统 1.问题描述 系统可以进行相关费用的查询及缴费 2 设计要求 系统提供相应
介个需要专业人才吧。天下没有免费的午餐
‘陆’ c语言课程设计高速公路计费系统
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
#define N 10
// 定义三个入口到出口的路程分别是l1 l2 l3
struct vehicle//车辆信息
{
char num[8];//车牌号
char variety[4];//车辆类型a,b,c(大,中,小)
int entime;//进入时间
char enter[2];//进入口1,2,3……分别为各个入口
}ve[N];
int count=0;
FILE *fp;
//函数声明//
void menu();//主菜单
void input();//输入函数
void show();
void all();
void readfile();//从文件导入
void writefile();//写入
void main()
{
readfile();
while(1)
{
menu();
}
}
void readfile()//从文件导入
{
if((fp=fopen("vehicle.txt","r"))==NULL)
{
printf("\n\t\t\t\t文件为空,请添加信息");
if((fp=fopen("vehicle.txt","w"))==NULL)
{
printf("\n\t\t\t建立失败");
exit(0);
}
else
{
printf("\n\t\t文件已建立");
printf("\n\t\tPress any key to get to mainmenu!");
getch();
return;
}
exit(0);
}
fseek(fp,0,2); /*文件指针fp指到到文件末尾*/
if(ftell(fp)>0) /*文件不为空*/
{
fseek(fp,0,0); /*文件指针指到文件开始位置*/
for(count=0;!feof(fp)&&fread(&ve[count],sizeof(struct vehicle),1,fp);count++);
printf("\n\t\t文件导入成功");
printf("\n\t\t按任意键进入系统");
getch();
return;
}
printf("\n\t\t\t已成功打开文件!");
printf("\n\t\t\tPress anykey to get back to mainmenu");
getch();
return;
}
void menu()
{system("cls");//清屏
char n;
printf("\n\n\n\n");
printf("\t\t☆★☆★☆★欢迎使用高速公路收费系统☆★☆★☆★\n");
printf("\t\t◇◇◇§§§◇◇◇◇主菜单◇◇◇◇§§§◇◇◇\n");
printf(" *********1.输入车辆信息*********\n");
printf(" *********2.显示车辆信息*********\n");
printf(" *********3.显示车辆总数*********\n");
printf(" *********4.保存退出系统 *********\n");
printf(" 请输入数字选择操作类型:\n");
n=getch();
switch(n)
{
case '1': input();break;
case '2': show();break;
case '3': all();break;
case '4': writefile();break;
default: break;
}
}
void input()
{ system("cls");
printf("请输入车辆信息\n");
printf("车牌号:\n");
scanf("%s",&ve[count].num);
printf("车辆类型(a,b,c分别代表大,中,小):\n");
scanf("%s",ve[count].variety);
printf("进入时间:\n");
scanf("%d",&ve[count].entime);
printf("入口(1,2,3代表三个入口):\n");
scanf("%s",&ve[count].enter);
count++;
printf("是否继续添加(Y/N)\n");
if(getch()=='y'||getch()=='Y')
input();
}
void show()
{ system("cls");
char num[8];
char enter[2];
int i;
double a,b,c,l1=200,l2=300,l3=400;// 定义三个入口到出口的路程分别是l1 l2 l3(200 300 400)公里
printf("请输入车牌号:\n");
scanf("%s",num);
for(i=0;i<count;i++)
{if(strcmp(ve[i].num,num)==0)
{
printf("车辆信息:");
printf("车辆类型:%s\n",ve[i].variety);
printf("入口站:%s\n",ve[i].enter);
printf("进入时间:%d\n",ve[i].entime);
printf("车牌号:%s",ve[i].num);
}
}
for(i=0;i<count;i++)
{ if(strcmp(ve[i].variety,"a")==0&&strcmp(ve[i].enter,"1")==0)
{
a=0.5*l1;
printf("此车应缴费%f元",a);
}
else if(strcmp(ve[i].variety,"a")==0&&strcmp(ve[i].enter,"2")==0)
{
a=0.5*l2;
printf("此车应缴费%f元",a);
}
else if(strcmp(ve[i].variety,"a")==0&&strcmp(ve[i].enter,"3")==0)
{
a=0.5*l3;
printf("此车应缴费%f元",a);
}
else if(strcmp(ve[i].variety,"b")==0&&strcmp(ve[i].enter,"1")==0)
{
b=0.4*l1;
printf("此车应缴费%f元",b);
}
else if(strcmp(ve[i].variety,"b")==0&&strcmp(ve[i].enter,"2")==0)
{
b=0.4*l2;
printf("此车应缴费%f元",b);
}
else if(strcmp(ve[i].variety,"b")==0&&strcmp(ve[i].enter,"3")==0)
{
b=0.4*l3;
printf("此车应缴费%f元",b);
}
else if(strcmp(ve[i].variety,"c")==0&&strcmp(ve[i].enter,"1")==0)
{
c=0.3*l1;
printf("此车应缴费%f元",c);
}
else if(strcmp(ve[i].variety,"c")==0&&strcmp(ve[i].enter,"2")==0)
{
c=0.3*l2;
printf("此车应缴费%f元",c);
}
else if(strcmp(ve[i].variety,"c")==0&&strcmp(ve[i].enter,"3")==0)
{
c=0.3*l3;
printf("此车应缴费%f元",c);
}
}
getch();
return;
}
void writefile()
{
int i;
if((fp=fopen("vehicle.txt","w"))==NULL)
{
printf("\n\t\t文件打开失败");
}
for (i=0;i<count;i++)
{
if(fwrite(&ve[i],sizeof(struct vehicle),1,fp)!=1)
{
printf("\n\t\t写入文件错误!\n");
}
}
fclose(fp);
printf("\n\t\t通讯录文件已保存");
printf("\n\t\t按任意键退出程序\n\t\t");
exit(0);
}
void all()
{ system("cls");
printf("车辆总数为:%d",count);
getch();
return;
}
‘柒’ 要求用C语言编写一个会员卡计费管理系统。
可以购买个现成的系统,一卡易连锁会员卡系统
我们公司做这方面系统有5、6年经验了,全国客户超过万家门店
‘捌’ 数据结构,设计一个学生信息管理系统,链式存储结构。C语言代码。要源代码。
摘要 #include
‘玖’ 系统开发:开发一个自助终端系统(类似于联通自助缴话费的自助机所使用的系统)应使用什么开发环境、软件
最简单就是定制化的浏览器模式,触摸操作。
‘拾’ 智慧缴费系统方案怎么做
智慧缴费在于方便,不像传统的缴费方式需要排队等待。在现在的技术发展下,智慧缴费的方式是可以实现的。
在英唐众创的智慧缴费系统方案里,主要是分为教育缴费、物业缴费、企业员工缴费、违章缴费等多种缴费场景。通过多种支付方式来实现快速缴费,而不需要到达缴费现场。