c语言实现机票管理系统源代码.docx
《c语言实现机票管理系统源代码.docx》由会员分享,可在线阅读,更多相关《c语言实现机票管理系统源代码.docx(30页珍藏版)》请在冰点文库上搜索。
c语言实现机票管理系统源代码
/*1、用户和管理员及航班信息请以英文字母或数字输入*/
/*2、管理员账户为:
boss,密码为:
123。
保存在txt文件中,需要修改请于程序中修改*/
/*3、部分文件读写为二进制读写,所以打开文件时会看到乱码*/
#include
#include
#include
#include
#defineN1000
voidzhujiemian();//主界面函数
voidverify();//用户及管理员登录选择
voidloginmanager();//管理员登录
voidloginuser();//用户登录
voidloginflightm();//管理员登录机票系统
voidloginflightu();//用户登录机票系统
voidcreatfile();//创建用户信息模块
voidsaveuser();//用户信息保存模块程序
voidinput();//输入航班信息
voidprint();//输出航班信息
voidsave();//保存航班信息
voidread();//读取航班信息
voidpaixu();//对所有航班按航班号排序
voidsearch();//查找航班信息
voiddingpiao();//订票信息
structusers//管理员/用户信息结构体,管理员可以修改航班信息
{
charName[20];//管理员/用户姓名
charsexual[10];//用户性别
charps[8];//用户密码
intage;//用户年龄
longNumber;//用户身份证号码
intpower;//power为1是管理员登录,为0是用户登录
}user[N],up,mg;//up为键盘输入用户信息,user[N]为文件保存的用户信息,mg为管理员结构体
intn;//所有用户个数,初始化为0
structair//航班信息结构体
{
intnum;//航班号
charstart[20];//出发地
charover[20];//目的地
chartime[10];//时间
intcount;//票数
intprize;//票价
}s[N],fnew;
inti;
intm=0;//所有航班个数
#definePRINT"%-d%12s%12s%10s%12d%10d\n",s[i].num,s[i].start,s[i].over,s[i].time,s[i].count,s[i].prize//定义输出格式
voidmain()//主函数
{
zhujiemian();
}
voidzhujiemian()//主界面函数
{
intj;
printf("#===================================================#\n");
printf("#欢迎进入机票管理系统#\n");
printf("#1、登录系统#\n");
printf("#2、新用户注册#\n");
printf("#0、退出#\n");
printf("#===================================================#\n");
printf("请在1-2中选择以回车键结束:
\n\n");
scanf("%d",&j);
switch(j)
{
case1:
verify();//进入机票系统
break;
case2:
creatfile();//进入用户注册系统
break;
case0:
;
break;
}
}
voidverify()//验证用户及管理员信息模块
{
intj;
system("cls");
printf("#===================================================#\n");
printf("#1、管理员登录#\n");
printf("#2、用户登录#\n");
printf("#0、返回主界面#\n");
printf("#===================================================#\n");
scanf("%d",&j);
switch(j)
{
case1:
loginmanager();//进入管理员登录界面
break;
case2:
loginuser();//进入用户登录界面
break;
case0:
system("cls");
zhujiemian();//进入主界面
break;
}
}
/********管理员登录确定函数**********/
voidloginmanager()
{
FILE*fp=NULL;//定义文件指针
charDataFile[20]="manager.txt";//存储管理员信息的文件名
inti=0,j=1;
charrelogin;//是否重新登录
intsuccess=0;//登录成功的标志
printf("\n---管理员登录---\n");
fp=fopen(DataFile,"r");
if(fp==NULL)//如果当前文件不存在,初始化根用户名为boss,密码为123,权限为管理员
{
printf("首次使用该系统!
\n");
printf("管理员账户为:
boss密码为:
123\n");
fp=fopen(DataFile,"a");//以追加方式打开文件
user[0].Number=0;
strcpy(user[0].Name,"boss");
strcpy(user[0].sexual,"male");
user[0].age=22;
user[0].power=1;
strcpy(user[0].ps,"123");
fwrite(&user[0],sizeof(user),1,fp);
fclose(fp);
}
else
fclose(fp);
again:
printf("请输入管理员姓名:
");
scanf("%s",up.Name);//输入用户名
up.Name[19]='\0';
printf("请输入管理员密码:
");
fflush(stdin);
for(i=0;i<7;i++)//输入密码,以*在屏幕显示
{
up.ps[i]=getch();
up.ps[i+1]='\0';//字符要以'\0'结尾
if(up.ps[i]=='\b')
{
i--;
up.ps[i]='\0';//清除前一个字符
i--;//接收前一个字符
printf("\b");
printf("\b");
continue;
}
if(up.ps[i]=='\r')
{
up.ps[i]='\0';
break;
}
printf("*");
}
fp=fopen(DataFile,"rt");
if(fp==NULL)//打开文件失败时提示
{
printf("\n打开%s失败!
按任意键结束程序\n",DataFile);
perror("Openfilefail");
getchar();
return;
}
if((fp=fopen("manager.txt","r"))==NULL)//打开文件,并判断是否出错
{
printf("\n出错,请检查文件是否存在,按任意键返回主菜单\n");//打印出错提示getchar();
}
else
fread(&mg,sizeof(structusers),1,fp);//从文件中读取信息
fclose(fp);//关闭文件
if(strcmp(mg.Name,up.Name)==0&&strcmp(mg.ps,up.ps)==0)
{
success=1;
}
if(success==1)//登录成功
{
printf("\n登录成功,按任意键进入机票调整系统!
\n");
getchar();
loginflightm();
}
else//未登录成功
{
fflush(stdin);//清除输入缓冲区中的字符
printf("\n用户名或密码错误!
重新输入请按y,退出请按n:
\n");
relogin=getchar();
if(relogin=='y'||relogin=='Y')
{
getchar();
gotoagain;
}
else
{
verify();
exit(0);
}
}
}
/********用户登录函数**********/
voidloginuser()
{
FILE*fp=NULL,*fp1;//定义文件指针
charDataFile[20]="yonghu.txt";//存储管理员信息的文件名
inti=0,j=0;
charrelogin;//是否重新登录
intsuccess=0;//登录成功的标志
printf("\n---用户登录---\n");
fp=fopen(DataFile,"r");
//读取文件中数据
if((fp1=fopen("howmanyusers.txt","a"))==NULL)//读写方式打开文件,若文件不存在,则n=0
{
//printf("创建文件失败!
\n\n");//打印出错提示
n=0;
//getchar();
//continue;
}
else
{
fp1=fopen("howmanyusers.txt","r");
fscanf(fp1,"%d",&n);//读取fp1中的用户个数
}
fclose(fp1);
if((fp=fopen("yonghu.txt","r"))==NULL)//打开文件,并判断是否出错
{
fp1=fopen("howmanyusers.txt","w+");//以写方式打开
fprintf(fp1,"%d",0);//打开用户文件失败,则输入用户个数0到fp1
fclose(fp1);
printf("\n目前没有用户信息,请按ENTER键返回主菜单先进行注册!
\n");
getchar();
getchar();
system("cls");
zhujiemian();
}
for(i=0;i{
fread(&user[i],sizeof(structusers),1,fp);//从文件中读取信息
}
fclose(fp);//关闭文件
//输入数据与文件中用户比对
again:
printf("请输入用户姓名:
");
scanf("%s",up.Name);//输入用户名
up.Name[19]='\0';
printf("请输入用户密码:
");
fflush(stdin);
for(i=0;i<7;i++)//输入密码,以*在屏幕显示
{
up.ps[i]=getch();
up.ps[i+1]='\0';//字符要以'\0'结尾
if(up.ps[i]=='\b')
{
i--;
up.ps[i]='\0';//清除前一个字符
i--;//接收前一个字符
printf("\b");
printf("\b");
continue;
}
if(up.ps[i]=='\r')
{
up.ps[i]='\0';
break;
}
printf("*");
}
for(i=0;i{
if(strcmp(user[i].Name,up.Name)==0&&strcmp(user[i].ps,up.ps)==0)
{
success=1;
break;
}
}
if(success==1)//登录成功
{
printf("\n登录成功,按任意键进入机票调整系统!
\n");
getchar();
loginflightu();
}
else//未登录成功
{
fflush(stdin);//清除输入缓冲区中的字符
printf("\n用户名或密码错误!
重新输入请按y,退出请按n:
\n");
relogin=getchar();
if(relogin=='y'||relogin=='Y')
{
getchar();
gotoagain;
}
else
{
verify();
exit(0);
}
}
}
voidsaveuser(structusers[])//用户信息保存模块程序
{
FILE*fp,*fp1;//定义文件指针
if((fp=fopen("yonghu.txt","a"))==NULL)//打开文件并判断是否出错
{
printf("创建文件失败!
\n\n");//打印出错提示
getchar();
return;
}
if((fp1=fopen("howmanyusers.txt","w+"))==NULL)//打开文件并判断是否出错
{
printf("创建文件失败!
\n\n");//打印出错提示
getchar();
return;
}
for(i=0;i{
if(fwrite(&user[i],sizeof(structusers),1,fp)==0)//向文件写入数据,并判断是否出错
{
printf("向文件输入数据失败!
\n\n");
}
}
fprintf(fp1,"%d",n);//输入用户个数到fp1
fclose(fp);//关闭文件
fclose(fp1);//关闭文件
}
voidcreatfile()//增加用户信息模块
{
FILE*fp=NULL,*p=NULL,*fp1;
charDataFile[20]="yonghu.txt";//存储用户信息的文件名
//inta[100];
inti=0,k=1,count=0;
fp=fopen(DataFile,"r");
system("cls");//清屏
if(fp==NULL)//如果当前文件不存在,提示打开文件失败
{
fp1=fopen("howmanyusers.txt","w+");//以写方式打开
fprintf(fp1,"%d",0);//打开用户文件失败,则输入用户个数0到fp1
fclose(fp1);
printf("\n不存在%s,正在创建!
\n",DataFile);
fp=fopen(DataFile,"a");
creatfile();
}
if((fp1=fopen("howmanyusers.txt","a"))==NULL)//读写方式打开文件,若文件不存在,则n=0
{
n=0;
}
else
{
fp1=fopen("howmanyusers.txt","r");
fscanf(fp1,"%d",&n);//读取fp1中的用户个数
}
fclose(fp1);
for(i=0;i{
fread(&user[i],sizeof(structusers),1,fp);//从文件中读取信息
}
fclose(fp);//关闭文件
//如果成功打开文件,则提示输入用户相关信息
printf("请输入用户信息\n");
fflush(stdin);
while(k)
{
//printf("\n输入身份证号码注意身份证号码不能为0!
\n");
printf("请输入身份证号码:
");
scanf("%ld",&up.Number);
i=0;//再次初始化i为0
//判断身份证号是否存在
while(i{
if(user[i].Number==up.Number)
{
printf("该身份证号码已被使用过!
\n请重新输入身份证号:
");
scanf("%ld",&up.Number);
i=0;
//continue;
}
else
i++;
}
//经循环对比后,i的值仍和n相等,将新注册的信息加入数组末位
user[i].Number=up.Number;
printf("姓名:
");
scanf("%s",&user[i].Name);
user[i].Name[19]='\0';
printf("性别:
");
scanf("%s",&user[i].sexual);
printf("用户密码:
");
scanf("%s",&user[i].ps);
printf("年龄:
");
scanf("%d",&user[i].age);
n++;//用户数目增加
printf("是否继续注册?
是:
选1,否:
选0;");
scanf("%d",&k);
}
saveuser(user);//保存用户信息
fclose(fp);
//在屏幕上显示文件内容
system("cls");
printf("数据已经成功保存到%s中\n",DataFile);
getchar();
printf("按任意键返回主界面!
\n");
getchar();
system("cls");
zhujiemian();//返回主界面
}
voidloginflightm()//管理员登录机票系统
{
intj;
do
{
system("cls");
printf("★----------------您好,欢迎进入自动化飞机订票系统!
---★\n");
printf("================================================================================\n");
printf("**---------------☆1.输入航班信息☆---------------------------**\n\n""**------------☆2.浏览航班信息☆-----------------------**\n\n""**--------☆3.查找航班信息-☆--------------------**\n\n""**-----------☆4.对航班按航班票价排序---☆-----------------------**\n\n""**--------------☆5.订票信息-☆-------------------------**\n\n""**------------------☆0.退出-☆-----------------------------**\n\n""**-----------------------☆☆---------------------------------**\n\n""**-------------------------☆----------------------------------**\n\n""**-----------------------☆☆----------------------------------**\n\n");
printf("================================================================================\n");
printf("请在0-5中选择以回车键结束:
\n\n");
scanf("%d",&j);
switch(j)
{
case1:
input();//调用输入模块
break;
case2:
system("cls");
print();//调用打印模块
break;
case3:
search();//调用查找模块
break;
case4:
paixu();//调用排序模块
break;
case5:
dingpiao();//调用订票模块
break;
case0:
;
break;
}
}while(j!
=0);//判断结束
printf("按任意键返回主界面\n");
system("cls");
zhujiemian();
}//登录函数结束
voidloginflightu()//用户登录机票系统
{
intj;
do
{
system("cls");
printf("★----------------您好,欢迎进入自动化飞机订票系统!
---★\n");
printf("================================================================================\n");
printf("**------------☆1.浏览航班信息☆-----------------------**\n\n""**--------☆2.查找航班信息-☆--------------------**\n\n""**-----------☆3.对航班按航班票价排