第一篇:飞机售票系统源代码
#include
typedef struct wat_ros { char name[10];/*姓名*/ int req_amt;/*订票量*/ struct wat_ros *next;}qnode,*qptr;
typedef struct pqueue { qptr front;/*等候替补客户名单域的头指针*/ qptr rear;/*等候替补客户名单域的属指针*/ }linkqueue;
typedef struct ord_ros { char name[10];/*客户姓名*/ int ord_amt;/*订票量*/ int grade;/*舱位等级*/ struct ord_ros *next;}linklist;
struct airline { char ter_name[10];/*终点站名 */ char air_num[10];/*航班号*/ char plane_num[10];/*飞机号*/ char date[7];/*飞行日期(星期几)*/ int tkt_amt;/*乘员定额*/ int tkt_sur;/*余票量*/ linklist *order;/*乘员名单域,指向乘员名单链表的头指针*/ linkqueue wait;/*等候替补的客户名单域,分别指向排队等候名单队头队尾的指针*/ }lineinfo;struct airline *start;struct airline air[MAXSIZE]={{“beijing”,“1”,“B8571”,“SUN”,3,1}, {“shanghai”,“2”,“S1002”,“MON”,2,5}, {“london”,“3”,“L1003”,“FRI”,1,3}};;
void display(struct airline *info)/*打印每条航线的基本信息*/ {printf(“%8st%3st%st%4stt%3dt%10dn”,info->ter_name,info->air_num,info->plane_num,info->date,info->tkt_amt,info->tkt_sur);}
void list()/*打印全部航线信息*/ { struct airline *info;int i=0;info=start;printf(“终点站名t航班号t飞机号t飞行日期t乘员定额t余票量n”);while(i void search()/*根据客户提出的终点站名输出航线信息*/ { struct airline *info,*find();char name[10];int i=0;info=start;printf(“请输入终点站名:”);scanf(“%s”,name);while(i struct airline *find()/*根据系统提出的航班号查询并以指针形式返回*/ { struct airline *info;char number[10];int i=0;info=start;printf(“请输入航班号:”);scanf(“%s”,number);while(i void prtlink()/*打印订票乘员名单域的客户名单信息*/ { linklist *p;struct airline *info;info=find();p=info->order;if(p!=NULL){ printf(“客户姓名 订票数额 舱位等级n”);while(p){ printf(“%stt%dt%dn”,p->name,p->ord_amt,p->grade);p=p->next;} } else printf(“该航线没有客户信息!n”);} linklist *insertlink(linklist *head,int amount,char name[],int grade)/*增加订票乘员名单域的客户信息*/ { linklist *p1,*new1;p1=head;new1=(linklist *)malloc(sizeof(linklist));if(!new1){printf(“nOut of memory!n”);return NULL;} strcpy(new1->name,name);new1->ord_amt=amount;new1->grade=grade;new1->next=NULL;if(head==NULL)/*若原无订票客户信息*/ {head=new1;new1->next=NULL;} else head=new1;new1->next=p1;return head;} linkqueue appendqueue(linkqueue q,char name[],int amount)/*增加排队等候的客户名单域*/ { qptr new1;new1=(qptr)malloc(sizeof(qnode));strcpy(new1->name,name);new1->req_amt=amount;new1->next=NULL;if(q.front==NULL)/*若原排队等候客户名单域为空*/ q.front=new1;else q.rear->next=new1;q.rear=new1;return q;} void order()/*办理订票业务*/ { struct airline *info;int amount,grade;char name[10];info=start;if(!(info=find()))return;/*根据客户提供的航班号进行查询,如为空,退出该模块*/ printf(“请输入你订票所需要的数量:”);scanf(“%d”,&amount);if(amount>info->tkt_amt)/*若客户订票额超过乘员定票总额,退出*/ { printf(“n对不起,您输入的票的数量已经超过乘员定额!”);return;} if(amount<=info->tkt_sur)/*若客户订票额末超过余票量,订票成功并等记信息*/ { int i;printf(“请输入您的姓名(订票客户):”);scanf(“%s”,name);printf(“请输入%s票的舱位等级:”,name);scanf(“%d”,&grade);info->order=insertlink(info->order,amount,name,grade);/*在订票乘员名单域中添加客户信息*/ for(i=0;i 位 号是:%dn”,name,info->tkt_amt-info->tkt_sur+i+1);info->tkt_sur-=amount;/*该航线的余票量应减掉该客户的订票量*/ printf(“n祝您乘坐愉快!n”);} else /*若满员或余票额少于订票额,询问客户是否需要进行排队等候*/ { char r;printf(“n已经没有更多的票,您需要排队等候吗?(Y/N)”);r=getch();printf(“%c”,r);if(r=='Y'||r=='y'){ printf(“n请输入您的姓名(排队订票客户):”);scanf(“%s”,name);info->wait=appendqueue(info->wait,name,amount);/*在排队等候乘员名单域中添加客户信息*/ printf(“n注册成功!n”);} else printf(“n欢迎您下次再次订购!n”);} } void return_tkt()/*退票模块*/ { struct airline *info;qnode *t,*back,*f,*r;int grade;linklist *p1,*p2,*head;char cusname[10];if(!(info=find()))return;/*调用查询函数,根据客户提供的航线进行搜索*/ head=info->order;p1=head;printf(“请输入你的姓名(退票客户):”);scanf(“%s”,cusname);while(p1!=NULL){/*根据客户提供的姓名到订票客户名单域进行查询*/ if(!strcmp(cusname,p1->name))break;p2=p1;p1=p1->next;} if(p1==NULL){ printf(“对不起,你没有订过票!n”);return;}/*若未找到,退出本模块*/ else {/*若信息查询成功,删除订票客户名单域中的信息*/ if(p1==head)head=p1->next;else p2->next=p1->next;info->tkt_sur+=p1->ord_amt;grade=p1->grade;printf(“%s成功退票!n”,p1->name);free(p1);} info->order=head;/*重新将航线名单域指向订票单链表的头指针 */ f=(info->wait).front;/*f指向排队等候名单队列的头结点*/ r=(info->wait).rear;/*r指向排队等候名单队列的尾结点*/ t=f;/*t为当前满点条件的排队候补名单域*/ while(t){ if(info->tkt_sur=info->wait.front->req_amt){/*若满足条件者为头结点*/ int i;info->wait.front=t->next;printf(“%s订票成功!n”,t->name);for(i=0;i info->order=insertlink(info->order,t->req_amt,t->name,grade);/*插入到订票客户名单链表中*/ free(t);break;} back=t;t=t->next;if((info->tkt_sur)>=(t->req_amt)&&t!=NULL)/*若满足条件者不为头结点*/ { int i;back->next=t->next;printf(“%s订票成功!n”,t->name);for(i=0;i seat number 插入到订票客户名单链表中*/ free(t);break;} if(f==r)break;} } void sort_tkt(){/*按剩余票数排序*/ int j;struct airline t,*info,*p,*q; p=info=air;for(p=info;(p+1)->tkt_sur;p++){ } printf(“终点站名t航班号t飞机号t飞行日期t乘员定额t余票量if(p->tkt_sur } t=*p;*p=*q;*q=t;for(q=p+1;q->tkt_sur;q++)n”);for(j=0;j int menu_select()/*菜单界面*/ { int c;char s[20];printf(“ntt航空客运订票系统n”);printf(“******************************************n”);printf(“ 1.浏览航线信息n”);printf(“ 2.浏览已订票客户信息n”);printf(“ 3.查询航线n”);printf(“ 4.办理订票业务n”);printf(“ 5.办理退票业务n”);printf(“ 6.查看剩余票数并排序n”);printf(“ 0.退出系统n”);printf(“*******************************************n”);do{ printf(“请选择:”);scanf(“%s”,s);c=atoi(s);}while(c<0||c>7);return c;} void main(){ start=air;for(;;){ switch(menu_select()){ case 1:list();break;case 2:prtlink();break;case 3:search();break;case 4:order();break;case 5:return_tkt();break;case 6:sort_tkt();break;case 0:printf(“n欢迎使用本系统,再见!n”);exit(0);} printf(“nPress any key to continue!n”);getch();} } #include int number;//航班号 int Number;//飞机号 int week;//星期几飞行 int day;//日期 int left;//余票额 int n;//与数组flag一起确定客户订票状态 public: int flag[20];//订票状态数组,-1为预订票,1为已定票,0为初始化状态 Plane()//构造函数 { name[0]=' '; number=0; Number=0; week=0; day=0; left=M; n=0;//数组从0开始计数 for(int i=0;i<20;i++) flag[i]=0;} void init()//初始化每种飞机票 { cout<<“请输入终点站名:”; cin>>name; cout<<“请输入航班号:”; cin>>number; cout<<“请输入飞机号:”; cin>>Number; cout<<“请输入星期几飞行:”; cin>>week; cout<<“请输入航班的日期:”; cin>>day;} ~Plane(){};//析构函数 char *getname(){return name;}//获得终点站名 int getnumber(){return number;}//获得航班号 int getNumber(){return Number;}//获得飞机号 int getweek(){return week;}//获得星期几飞行 int getday(){return day;}//获得日期 int getleft(){return left;}//获得余票额 int getn(){return n;}//获得旅客数目 void inleft(int n){left=left+n;}//余票额增加函数 void deleft(int n){left=left-n;}//余票额减少函数 void inn(){n++;}//旅客数目增加函数 };Plane pl[N];int showmenu();//菜单函数 void start();//初始化函数 void query();//查询函数 void make();//订票函数 void back();//退票函数 int main(){ cout<<“这是民航售票处的计算机系统程序”< int choice; choice=showmenu(); switch(choice) { case 1:query();break; case 2:make();break; case 3:back();break; case 0:return 0; default:cout<<“你敲错了!n”; } } return 0;} int showmenu(){ int ch;cout< pl[i].init(); cout< if(strcmp(name,pl[i].getname())==0) { num++; cout<<“航班号:”< cout<<“飞机号:”< cout<<“星期:”< cout<<“航班日期:”< cout<<“余票额:”< break; } if(num==0) cout<<“没有此航班”< if(number==pl[i].getnumber()) { num++; if(n<=pl[i].getleft()) { cout<<“此航班有票”< pl[i].deleft(n); pl[i].inn(); pl[i].flag[pl[i].getn()]=1; for(i=0;i { cout<<“座位号”; cin>>sitnumber; } } else { cout<<“余票额少于订票额,请重新输入订票数额,”<<“订票数额应该少于或等于”< cin>>nu; if(nu<=pl[i].getleft()) { cout<<“此航班有票”< pl[i].deleft(nu); pl[i].inn(); pl[i].flag[pl[i].getn()]=1; for(i=0;i { cout<<“座位号”; cin>>sitnumber; } } else { cout<<“是否需要预约”< cout<<“是(1) 否(2)”< cin>>ch; switch(ch) { case 1:pl[i].inn();pl[i].flag[pl[i].getn()]=-1;break; case 2:break; default:cout<<“你敲错了!”< } } } } if(num==0) cout<<“没有此航班”< cout<<“请输入日期:”;cin>>day;cout<<“请输入航班:”;cin>>number;for(int i=0;i if((day==pl[i].getday())&&(number==pl[i].getnumber()))//日期与航班是否满足 { num++;//日期与航班满足 cout<<“输入退票数目”; cin>>n; cout<<“退票成功”< pl[i].inleft(n);//该种飞机票增加,即已退票 for(int j=0;j<=pl[i].getn();j++)//顺序查询客户订票状态 { if(pl[i].flag[j]==-1)//客户是否为预定状态 { cout<<“有预约订票,请输入订票数额:”; cin>>nu; if(nu<=pl[i].getleft())//余票额是否满足要求 { cout<<“此航班有票”< pl[i].flag[j]=1; cout<<“订票成功”< pl[i].deleft(nu); for(int k=0;k { } cout<<“座位号”<<“ ”; cin>>sitnumber; } cout<<“余票额为”< } } else cout<<“没有预约订票!”<<“余票额为”< #include //包含access函数的头文件 #define N 9999 //定义最多的航班数 #define PRINT “%dtt%stt%stt星期%stt%dn ”,s[i].num,s[i].start,s[i].over,s[i].time,s[i].count //宏定义输出格式 struct air //定义结构体数组 { int num; //定义航班号 char start[20];//航班起始站 char over[20];//终点站 char time[10];//飞行时间 int count; //机票数量 }s[N]; int i,m=0; //定义全局变量 char ii[10]; void add();//函数声明增加航班信息函数 void print(); //显示航班信息 void search();//查找航班信息 void dingpiao();//订票业务 void tuipiao();//退票 void read();//读取文件 void save();//保存文件 void output();//输出格式 void paixu();//航班排序 void chushihua();//系统初始化 void build();//建立数据文件 void paixu1();//按航班号从小到大排序 void paixu2();//从大到小 void main()//主函数 { int j; chushihua();//系统初始化判断是否存在原始数据文件 printf(“ 欢迎使用飞机订票系统n”);//打印出系统主界面 do { printf(“================================== ”); printf(“1.增加航班信息n” “t2.浏览航班信息n” “tt3.查找航班信息(按航班号)tt╮(╯_╰)╭n” “ttt4.航班排序(按航班号)n” “tttt5.订票业务n” “to(︶︿︶)ottt6.退票业务n” “tttttt0.退出n”);printf(“================================== ”); printf(“请在0-6中选择以回车键结束: ”);scanf(“%d”,&j);switch(j){ case 1: add();//调用增加航班函数 break; case 2:print();//调用显示模块 break; case 3:search();//调用查找模块 break; case 4:paixu();//调用排序函数 break; case 5:dingpiao();//调用订票模块 break; case 6:tuipiao();//调用退票模块 break; case 0: //退出系统 save(); printf(“谢谢使用,再见!”); break;} }while(j!=0);//判断是否调用其他函数 } void chushihua()//定义系统初始化函数 { if(access(“hangban.dat”,0)){ build();} else read();} void build()//定义建立数据文件函数 { FILE *fp;//定义文件指针 if((fp=fopen(“hangban.dat”,“wb”))==NULL)//打开文件并判定是否出错 { printf(“创建文件失败!”);//打印出错提示 getchar(); return;} printf(“请依次输入航班信息(以回车键结束):n”); //打印提示信息 printf(“------------n”);for(i=0;i printf(“请输入航班号: ”); scanf(“%d”,&s[i].num);//输入航班号 printf(“请输入起始站: ”); scanf(“%s”,s[i].start);//输入起始站 printf(“请输入终点站: ”); scanf(“%s”,s[i].over);//输入终点站 printf(“请输入时间(星期几): ”); scanf(“%s”,s[i].time);//输入时间 printf(“请输入机票数: ”); scanf(“%d”,&s[i].count);//输入机票数 fwrite(&s[i],sizeof(struct air),1,fp); m++; printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”); scanf(“%s”,ii); if(strcmp(ii,“y”)!=0) //判断是否继续添加航班信息 { fclose(fp); //关闭文件 return; } } } void read() //定义读取文件函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“r”))==NULL){ printf(“创建文件失败!”); getchar(); return;} i=0;while(!feof(fp)){ fread(&s[i],sizeof(struct air),1,fp);//逐块读取数据 i++; m++;//计算存在航班数 } m--;fclose(fp);} void save()//定义保存函数 { FILE *fp;if((fp=fopen(“hangban.dat”,“wb”))==NULL) { printf(“创建文件失败!”); getchar(); return;} for(i=0;i //逐块保存数据 fwrite(&s[i],sizeof(struct air),1,fp);fclose(fp);} void add()//定义增加航班信息函数 { do{ printf(“请依次输入您要增加的航班信息(以回车键结束): n”); //打印提示信息 printf(“------------n”); printf(“请输入航班号: ”); scanf(“%d”,&s[m].num);//读取航班号 printf(“请输入起始站: ”); scanf(“%s”,s[m].start);//读取起始站 printf(“请输入终点站: ”); scanf(“%s”,s[m].over);//读取终点站 printf(“请输入时间: ”); scanf(“%s”,s[m].time);//读取时间 printf(“请输入机票数: ”); scanf(“%d”,&s[m].count);//读取机票数 m++; printf(“添加完毕,是否继续添加?请键入y或n以回车键结束:”); scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判断是否继续添加 } void output()//定义输出格式函数 { printf(“航班号tt起始站tt终点站tt时间tt机票数n”);//信息标题 for(i=0;i printf(PRINT);//打印出信息 } void print()//定义显示航班信息函数 { printf(“n目前我们有如下航班:n”);output(); //调用输出格式函数 printf(“n请按回车键返回上层菜单 ”);getchar();getchar();} void search()//定义查询函数 { int n; do { printf(“n请输入航班号: ”); scanf(“%d”,&n);//输入查询的航班号 for(i=0;i { if(s[i].num==n)//按航班号判定输出条件 { printf(“n您所查找的航班信息为:n ”); printf(“航班号tt起始站tt终点站tt时间tt机票数 nn”); printf(PRINT);//显示信息 printf(“n查询完毕,按回车键继续”); getchar(); getchar(); return; } } printf(“n对不起,没有您需要的信息!n ”);printf(“是否重新查找?请键入y或n以回车键结束 ”);scanf(“%s”,ii);}while(!strcmp(ii,“y”));//判定是否重新查找 } void dingpiao()//定义订票业务函数 { int n;char a[10]=“y”;do { search();//调用查询模块 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能订票。n”);//未查找到所需航班 printf(“n请按回车键返回上层菜单 ”); getchar(); getchar(); strcpy(ii,“n”); break; } do { printf(“请输入您要订的机票数(以回车键结束): ”); scanf(“%d”,&n);//输入所订机票数 if(n<=0) //判定机票数是否出错 { printf(“输入错误!至少需订1张机票。n”); } else if(s[i].count==0)//判定机票是否售完 { printf(“对不起,你所选择的航班的机票已售完!n”); break; } else if(s[i].count!=0&&s[i].count>=n)//判定机票数是否大于等于订票数 { s[i].count=s[i].count-n; printf(“订票成功!”); break; } else if(s[i].count { printf(“对不起,你所选择的航班只剩 %d张机票n”, s[i].count); printf(“是否需要重新输入机票数?请输入y或n以回车键结束: ”);//判定是否重新输入订票数 scanf(“%s”,a); } }while(!strcmp(a,“y”)); printf(“是否需要订其他航班的机票?请输入y或n以回车键结束: ”); scanf(“%s”,a);}while(!strcmp(a,“y”));//判定是否继续订票 } void tuipiao()//定义退票函数 { int n;char a[10];do { search();//调用查询函数 if(!strcmp(ii,“n”)) { printf(“对不起!没有找到您所需要的航班,所以不能退票。n”); printf(“n请按回车键返回上层菜单 ”); getchar(); getchar(); strcpy(ii,“n”); break; } printf(“请输入您要退的机票数目: ”); scanf(“%d”,&n);//输入所退票数 if(n<=0) //判定票数是否有效 printf(“输入错误!至少需退1张机票。”); else { s[i].count=s[i].count+n; printf(“退票成功!”); } printf(“是否继续? 请键入y或n以回车键结束: ”);//判定是否继续退票 scanf(“%s”,a);}while(!strcmp(a,“y”));//判定并跳出循环 } void paixu()//定义排序函数 { int n; printf(“n******************************************************************************** ”); printf(“1.按航班号从小到大排序n” “t2.按航班号从大到小排序n”);printf(“******************************************************************************** ”); printf(“请在1-2中选择以回车键结束: ”);scanf(“%d”,&n);//输入排序方式 switch(n){ case 1:paixu1();//调用从小到大排序函数 break; case 2:paixu2();//调用从大到小排序函数 break;} printf(“排序后的航班信息为:n”);output(); //显示排序后航班信息 printf(“n请按回车键返回上层菜单 ”); getchar(); getchar();} void paixu1()//定义从小到大排序函数 { int k,j;struct air t;for(i=0;i { k=i; for(j=i+1;j if(s[k].num>s[j].num) k=j; if(i!=k) { t=s[k]; s[k]=s[i]; s[i]=t; } } } void paixu2()//定义从大到小排序函数 { } int k,j;struct air t;for(i=0;i if(s[k].num k=j;if(i!=k){ t=s[k]; s[k]=s[i]; s[i]=t;} } #include char xm[7];char xb[3];char sr[15];char whcd[13];char zc[17];char sfzh[19];char lxdh[12];int gl;int nl;};struct member_info member[N+1];int CurrentCount=0;void input(){ char sfjx=1; while(sfjx!=0) { if(CurrentCount==N) { printf(“n人数已达上限,不能添加!!n”); sfjx=0; } else { CurrentCount++; printf(“n请输入员工信息(姓名 性别 生日 年龄 文化程度 联系电话 身份证号码 工龄 职称):n”); scanf(“%s%s%s%d%s%s%s%d%s”,member[CurrentCount].xm,member[CurrentCount].xb,member[CurrentCount].sr,&member[CurrentCount].nl,member[CurrentCount].whcd,member[CurrentCount].lxdh,member[CurrentCount].sfzh,&member[CurrentCount].gl,member[CurrentCount].zc); printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } } printf(“人员已排序”);int i,j; for(i=1;i for(j=CurrentCount;j>i;j--) if(strcmp(member[j].sfzh,member[j-1].sfzh)<0) { member[0]=member[j]; member[j]=member[j-1]; member[j-1]=member[0]; } printf(“n 人事基本信息表n”); printf(“ 序号 姓名 性别 生日 年龄 文化程度 联系电话 身份证号码 工龄 职称n”); for(i=1;i<=CurrentCount;i++) printf(“%4d %6s%3s%11s%3d%8s%12s%20s%3d%5sn”,i,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); system(“pause”);} void save(){ FILE *fp; fp=fopen(“ygjbxx.txt”,“w”); if(fp==NULL) printf(“n文件打开不成功,信息无法保存!!n”); else { fprintf(fp,“%d”,CurrentCount); for(int i=1;i<=CurrentCount;i++) fprintf(fp,“n%8s%4s%16s%4d%14s%13s%20s%4d%18s”,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); fclose(fp); printf(“n信息已成功保存!!n”); } system(“pause”);} void read(){ FILE *fp; fp=fopen(“ygjbxx.txt”,“r”); if(fp==NULL) printf(“n文件打开不成功,信息无法读取!!n”); else { fscanf(fp,“%d”,&CurrentCount); for(int i=1;i<=CurrentCount;i++) { fscanf(fp,“%s%s%s%d%s%s%s%d%s”,member[i].xm,member[i].xb,member[i].sr,&member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,&member[i].gl,member[i].zc); printf(“姓名:%s 性别:%s 生日:%s 年龄:%d 文化程度: %s 联系电话: %s 身份证号码: %s 工龄: %d 职称: %sn”,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); } fclose(fp); printf(“n信息已成功读取!!n”); } system(“pause”);} void search(){ char dcsfzh[19]; int sfjx=1,i; while(sfjx!=0) { printf(“n请输入一个待查员工的身份证号码:”); scanf(“%s”,dcsfzh); strcpy(member[0].sfzh,dcsfzh); i=CurrentCount; while(strcmp(member[i].sfzh,dcsfzh)!=0) i--; if(i==0) printf(“查无此人!!n”); else { printf(“n此人详细信息如下:n”); printf(“姓名:%s 性别:%s 生日:%s 年龄:%d 文化程度: %s 联系电话: %s 身份证号码: %s 工龄: %d 职称: %sn”,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} void del(){ char dcsfzh[19]; int sfjx=1,i,j; while(sfjx!=0) { printf(“n请输入一个待删员工的身份证号码:”); scanf(“%s”,dcsfzh); strcpy(member[0].sfzh,dcsfzh); i=CurrentCount; while(strcmp(member[i].sfzh,dcsfzh)!=0) i--; if(i==0) printf(“查无此人!!n”); else { printf(“n此人详细信息如下:n”); printf(“姓名:%s 性别:%s 生日:%s 年龄:%d 文化程度: %s 联系电话: %s 身份证号码: %s 工龄: %d 职称: %sn”,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); printf(“n按任意键开始删除......n”); system(“pause”); for(j=i+1;j<=CurrentCount;j++) member[j-1]=member[j]; CurrentCount--; printf(“n已成功删除......n”); system(“pause”); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} void modify(){ char dcsfzh[19]; int sfjx=1,i; while(sfjx!=0) { printf(“n请输入一个待修改员工的身份证号码:”); scanf(“%s”,dcsfzh); strcpy(member[0].sfzh,dcsfzh); i=CurrentCount; while(strcmp(member[i].sfzh,dcsfzh)!=0) i--; if(i==0) printf(“查无此人!!n”); else { printf(“n此人详细信息如下:n”); printf(“姓名:%s 性别:%s 生日:%s 年龄:%d 文化程度: %s 联系电话: %s 身份证号码: %s 工龄: %d 职称: %sn”,member[i].xm,member[i].xb,member[i].sr,member[i].nl,member[i].whcd,member[i].lxdh,member[i].sfzh,member[i].gl,member[i].zc); printf(“n请输入新内容......n”); printf(“n请输入人员相关信息(姓名 性别 生日 年龄 文化程度 联系电话 身份证号码 工龄 职称):”); scanf(“%s%s%s%d%s%s%s%d%s”,member[CurrentCount].xm,member[CurrentCount].xb,member[CurrentCount].sr,&member[CurrentCount].nl,member[CurrentCount].whcd,member[CurrentCount].lxdh,member[CurrentCount].sfzh,&member[CurrentCount].gl,member[CurrentCount].zc); printf(“n已成功修改......n”); system(“pause”); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} int check(){ int count=0,name,pass; while(count<=2) { printf(“n请输入用户名及密码:”); scanf(“%d%d”,&name,&pass); count++; if((name==1)&&(pass==1)) count=10; else if(count>2) count=5; } if(count==10) return 0; else return 1;} struct mem_gz { float jbgz;float cql;float jj;float kk;float grsd;float sf;};struct mem_gz mem[N+1];void inputgz(){ char sfjx=1;CurrentCount=0; while(sfjx!=0) { if(CurrentCount==N) { printf(“n工资已添加完毕,无法添加!!n”); sfjx=0; } else { CurrentCount++; printf(“请输入身份证号码为:%s的员工工资资料n”,member[CurrentCount].sfzh); printf(“n请输入员工工资信息(基本工资 考勤 奖金 扣款 个人所得税):n”); scanf(“%f%f%f%f%f”,&mem[CurrentCount].jbgz,&mem[CurrentCount].cql,&mem[CurrentCount].jj,&mem[CurrentCount].kk,&mem[CurrentCount].grsd); mem[CurrentCount].sf=mem[CurrentCount].jbgz*mem[CurrentCount].cql+mem[CurrentCount].jj-mem[CurrentCount].kk-mem[CurrentCount].grsd; } printf(“n是否继续(0--结束,其它--继续):n”); scanf(“%d”,&sfjx); } system(“pause”);} void savegz(){ FILE *fq; fq=fopen(“yggzxx.txt”,“w”); if(fq==NULL) printf(“n文件打开不成功,信息无法保存!!n”); else { fprintf(fq,“%d”,CurrentCount); for(int i=1;i<=CurrentCount;i++) fprintf(fq,“n%f %f %f %f %f %f”,mem[i].jbgz,mem[i].cql,mem[i].jj,mem[i].kk,mem[i].grsd,mem[i].sf); fclose(fq); printf(“n信息已成功保存!!n”); } system(“pause”);} void readgz(){ FILE *fq; fq=fopen(“yggzxx.txt”,“r”); if(fq==NULL) printf(“n文件打开不成功,信息无法读取!!n”); else { fscanf(fq,“%d”,&CurrentCount); for(int i=1;i<=CurrentCount;i++) { fscanf(fq,“%f%f%f%f%f%f”,&mem[i].jbgz,&mem[i].cql,&mem[i].jj,&mem[i].kk,&mem[i].grsd,&mem[i].sf); printf(“基本工资: %f 考勤: %f 奖金: %f 扣款: %f 个人所得税: %f 实发工资:%fn”,mem[i].jbgz,mem[i].cql,mem[i].jj,mem[i].kk,mem[i].grsd,mem[i].sf); } fclose(fq); printf(“n信息已成功读取!!n”); } system(“pause”);} void searchgz(){ int dcbh; int sfjx=1; while(sfjx!=0) { printf(“n请输入一个待查员工编号(身份证号从小到大的顺序):”); scanf(“%d”,&dcbh); if(dcbh<1||dcbh>CurrentCount) printf(“查无此人!!n”); else { printf(“n此人工资信息如下:n”); printf(“基本工资: %f 考勤: %f 奖金: %f 扣款: %f 个人所得税: %f 实发工资:%fn”,mem[dcbh].jbgz,mem[dcbh].cql,mem[dcbh].jj,mem[dcbh].kk,mem[dcbh].grsd,mem[dcbh].sf); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} void delgz(){ int dcbh; int sfjx=1,j; while(sfjx!=0) { printf(“n请输入一个待删工资的编号:”); scanf(“%d”,&dcbh); if(dcbh<1||dcbh>CurrentCount) printf(“查无此人!!n”); else { printf(“n此人工资信息如下:n”); printf(“基本工资: %f 考勤: %f 奖金: %f 扣款: %f 个人所得税: %f 实发工资:%fn”,mem[dcbh].jbgz,mem[dcbh].cql,mem[dcbh].jj,mem[dcbh].kk,mem[dcbh].grsd,mem[dcbh].sf); printf(“n按任意键开始删除......n”); system(“pause”); for(j=dcbh+1;j<=CurrentCount;j++) mem[j-1]=mem[j]; CurrentCount--; printf(“n已成功删除......n”); system(“pause”); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} void modifygz(){ int dcbh; int sfjx=1; while(sfjx!=0) { printf(“n请输入一个待修改工资员工的编号:”); scanf(“%d”,&dcbh); if(dcbh<1||dcbh>CurrentCount) printf(“查无此人!!n”); else { printf(“n此人工资信息如下:n”); printf(“基本工资: %f 考勤: %f 奖金: %f 扣款: %f 个人所得税: %f 实发工资:%fn”,mem[dcbh].jbgz,mem[dcbh].cql,mem[dcbh].jj,mem[dcbh].kk,mem[dcbh].grsd,mem[dcbh].sf); printf(“n请输入新内容......n”); printf(“n请输入人员工资信息(基本工资 考勤 奖金 扣款 个人所得税 实发工资):”); scanf(“%f%f%f%f”,&mem[CurrentCount].jbgz,&mem[dcbh].cql,&mem[dcbh].jj,&mem[dcbh].kk,&mem[dcbh].grsd,&mem[dcbh].sf); printf(“n已成功修改......n”); system(“pause”); } printf(“n是否继续(0--结束,其它--继续):”); scanf(“%d”,&sfjx); } system(“pause”);} void listgz(){ int i; printf(“n 员工工资信息表n”); printf(“ 序号 基本工资 考勤 奖金 扣款 个人所得税 实发工资n”); for(i=1;i<=CurrentCount;i++) printf(“%4d %8f%8f%8f%8f”,i,mem[i].jbgz,mem[i].cql,mem[i].jj,mem[i].kk,mem[i].grsd,mem[i].sf); system(“pause”);} void main(){ int xz=1; printf(“ *~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*~*n”);printf(“ * 欢迎使用人事工资管理系统 *n”);printf(“ ***************************************nnn”); if(check()!=0) { printf(“n你无权使用本系统......nn”); system(“pause”); } else { while(xz!=0) { printf(“n请选择相应功能:n”); printf(“1-录入n2-查询n3-修改n4-删除n5-保存n6-读取n7-输入员工工资n8-保存工资信息n9-读取工资信息n10-修改工资信息n11-删除工资信息n12-工资列表n0-结束n请输入选择:”); scanf(“%d”,&xz); switch(xz) { case 1: input();break; case 2: search();break; case 3: modify();break; case 4: del();break; case 5: save();break; case 6: read();break; case 7: inputgz();break; case 8: savegz();break; case 9: readgz();break; case 10: modifygz();break; case 11: delgz();break; case 12: listgz();break; case 0: printf(“nn谢谢使用本系统!nn”);system(“pause”);break; default: printf(“n无此功能,请重新选择......n”); system(“pause”); } } } } 铁路售票系统应用软件需求分析报告 前言: (1)需求分析报告的编写目的 本需求分析报告的目的是规范化本软件的编写,旨在于提高软件开发过程中的能见度,便于对软件开发过程中的控制与管理,同时提出了本铁路售票系统的软件开发过程,便于程序员与客户之间的交流、协作,并作为工作成果的原始依据,同时也表明了本软件的共性,以期能够获得更大范围的应用。(2)产品背景明细 软件名称:铁路售票系统 软件开发者:(3)缩写及缩略语 铁路售票应用系统软件:基本元素为构成铁路售票及相关行为所必须的各种部分。 需求:用户解决问题或达到目标所需的条件或功能;系统或系统部件要满足合同、标准,规范或其它正式规定文档所需具有的条件或权能。 需求分析:包括提炼,分析和仔细审查已收集到的需求,以确保所有的风险承担者都明其含义并找出其中的错误,遗憾或其它不足的地方。 模块的独立性:是指软件系统中每个模块只涉及软件要求的具体的子功能,而和软件系统中其他的模块的接口是简单的。本工程描述: (1)软件开发的目标: 完善目前铁路售票系统,使之能跟上时代的发展。同时通过实践来提高自己的动手能力。(2)应用范围: 理论上能够实现于铁路部门的售票系统,其目的在于在原有的系统基础使得铁路售票实名化,以期实现完善日常生活中铁路售票的各种缺陷。(3)硬件配置要求: 硬件外部设备需奔腾133以上的pc机,内存需16兆以上。(4)子集说明: 软件分别有五个模块组成,每个模块各有不同的功能。但都能完成查询和存储功能,各模块的数据都存放在数据库中。数据的调用和连接都有程序来完成。(5)软件功能描述: 外部功能:实现可视化窗口,查找及存储 内部功能:同步,过滤,定位,识别 软件功能描述图: 赔偿信息 车次信息 列车明细 日志维护 个人信息 主界面 同步 过滤 数据库 定位 (6)软件操作人员的要求: 软件要求操作人员具有初步的相关知识(7)在其他方面的要求: 由于本系统为即时软件,对数据的同步要求较高,建议配置网络时使用可靠性较高的相关网络硬件设施。软件结构化描述(1)数据流图: 乘客 数据库更新 列车明细 个人信息 日志 售票员 (2)数据结构的描述: 车票=日期+价格+出发站+目的站+售票站+座号+车次+性质+编号 日期=年+月+日+时+分 价格=“1”..“9999” 出发站=1{汉字}6 目的站=1{汉字}6 售票站=1{汉字}6 座号=车厢号+座位号 车次=“1”..“9999” 编号=“000000001”..“999999999” 性质=“1”..“6” 注:“1”表示空调硬座特快,“2”表示空调软座普快等 设计要求: (1)所调用的数据库的显示: 输入内容:指定的库文件名。加工内容:调用指定的数据库。输出内容:所指定的数据库的库结构。(2)关于编辑框的说明: 输入内容:编辑框名称。加工内容:生成编辑框。输出内容:显示所生成的编辑框(3)指定记录说明: 输入内容:指定的项名及库文件名。加工内容:将指定的数据库里指定的记录置为当前记录。(4)初始化说明: 输入内容:所要求的尺寸 要求处理内容:确定指定对象在窗体中的开始尺寸的大小 输出内容:确定开始尺寸的四个参数。(5)最大化说明: 输入内容:指定的参数值。 加工内容:确定指定对象在窗体中的最大尺寸。输出内容:确定指定对象最大尺寸的四个参数。(6)最小化说明 原理同上 (7)查词编辑框说明(编辑框控制) 功能:主要是定义的一个编辑框,供用户输入一个词名,为程序生成查找条件做准备。输入内容:在查词编辑框中输入要查找的词名。加工内容:用输入的词名以供程序生成查找条。输出内容:地址、长度。 (8)内容编辑框说明(编辑框控制) 功能:主要是定义的一个编辑框,将程序查找到的用户所输入词的相关内容显示出来,为用户提供帮助信息。 输入内容:数据库中查找到的记录的项的内容的地址、长度。加工内容:置控制标题或值。 输出内容:显示用户所输入词的相关内容(如该词的格式、用法……)。(9)定义过滤说明 作用:定义用户输入的词名与内容库中的词名字段中的词名进行串比较,即定义词名字段为过滤字段。输入内容:用户输入的词名。 加工内容:把代码写入过滤条件指针之中。输出内容:查找条件。(10)执行过滤说明 作用:将定义的过滤作为内容库的过滤条件。输入内容:查找条件。 加工内容:与查找编辑框中的内容比较。输出内容:库过滤显。(11)同步说明: I:令牌持有标记 P:与数据库同步更新数据 O:更新数据库 环境要求: (1)数据录入精度需求 在进行向数据库文件提取数据时,要求数据记录定位准确,在往数据库文件数组中添加数时,要求输入数准确。 (2)软件自身时间特性需求 程序响应时间:在人的感觉和视觉事件范围内; 信息交换时间:要求在程序调用前调用后都与数据库保持同步更新,网络信息狡猾施加应该小于程序调用的时间 (3)数据管理能力需求 要求数据库具有很好的更新能力,由于本产品是实验性软件,故对磁盘和内存容量没有很高的要求,但是数据库应该能够对并发事件,脏数据具有较强的识别处理能力。接口要求: (1)硬件接口:无特别要求 (2)网络硬件接口要求:现实中要求具有高速以太网组网一实现联网销售,但是在理论实验验证软件本身的目的来看,无需网络通讯接口。(3)软件接口要求:无 软件属性(1)可用性 本软件也可以通过单步跟踪的操作进行检查处理。 (2)安全性 由于软件运行数据放在数据库中,所以参数不容易被错改、破坏,万一参数受到破坏也不会影响源程序。(3)可维护性 本软件利用数据库进行编程,系统结构由程序基本确定,大量的参数及文本内容全部放于数据库中。修改、更新数据只要在数据库进行修改添加,而不需要对系统结构进行修改,这样系统维护性、升级都十分方便。(4)兼容性 由于尚未测试,故无法对兼容性进行评析。支持信息(1)软件支持: 本软件开发是使用Delphi编写。 (2)设备支持: 推荐配置:WindowsXP,256内存,VGA显示器第二篇:航空售票系统+C++课程设计源代码
第三篇:C语言课程设计——飞机订票系统源代码
第四篇:人事管理系统源代码
第五篇:铁路售票系统