这几天没学什么能拿得出手的东西,都是一些基础,就不在博客上发表了,不过这几天把C语言的课程设计弄了一下,一下是源代码。
#include#include #include #include #include #include #define n 5 int len=0; //乘客信息 struct passenge { char name[10]; //姓名 int num; //所需票量 }lg[n]; //结构体变量名 //车票信息 typedef struct train { char start_stat[20]; //起始站 char end_stat[20]; //终点站 char go_time[16]; //出发时间 char go_data[16]; //出发日期 char train_num[15]; //车次信息 char all_time[16]; //旅途时间 int ticket_lea; //余票数量 }Train; //把结构体struct train 叫做 Train typedef Train Item; //又把Train 叫做 Item,目的让链表更通用 链表里只有2 个东西 项目和指针 struct node { //node是一个节点 节点包括项目和指针 Item item; struct node *next; }; //将信息保存到文件 void save_inf(struct node *pHead) //将链表中的信息保存到制定文件中 { //头指针不能移动 struct node *pTemp; //因为要一个节点移动 所以定义为pTemp移动 FILE *fp; fp=fopen("information.txt","at"); //打开文件 if(fp==NULL) { printf("打开文件失败,文件可能不存在!n"); exit(1); } //遍历输入 for(pTemp=pHead ; pTemp != NULL;pTemp=pTemp->next) //节点先指向项目,项目里面再找成员 fprintf(fp,"%s %s %s %s %s %s %dn",pTemp->item.start_stat,pTemp->item.end_stat, pTemp->item.go_time,pTemp->item.go_data,pTemp->item.train_num,pTemp->item.all_time,pTemp->item.ticket_lea); fclose(fp); } //增加 struct node *add(struct node *pHead) { struct node *pNew; struct node *current; pNew=(struct node *)malloc(sizeof(struct node)); //再次分配结点的内存空间 pNew->next=pHead; //新结点指向原来的首节点 pHead=pNew; //头指针指向新结点 //尾插法; printf("n请输入起始站:"); scanf("%s",pNew->item.start_stat); printf("请输入终点站:"); scanf("%s",pNew->item.end_stat); printf("请输入出发时间:"); scanf("%s",pNew->item.go_time); printf("请输入出发日期:"); scanf("%s",pNew->item.go_data); printf("请输入车次信息:"); scanf("%s",pNew->item.train_num); printf("请输入旅途时间:"); scanf( "%s",pNew->item.all_time); printf("请输入余票数量:"); scanf("%d",&pNew->item.ticket_lea); current=pHead; while(current!=NULL){ printf("%-10s",current->item.start_stat); printf("%-10s",current->item.end_stat); printf("%-12s",current->item.go_time); printf("%-14s",current->item.go_data); printf("%-12s",current->item.train_num); printf("%-13s",current->item.all_time); printf("%-d",current->item.ticket_lea); printf("n"); current=current->next; } return pHead; //返回头指针 } //输出显示模块 void output(struct node *pHead) { struct node *pTemp; //循环所用的临时指针 pTemp=pHead; //指针的到首结点的指针 printf("t******车票信息如下******n"); printf("起始站 终点站 出发时间 出发日期 车次信息 旅途时间 余票量n"); while((pTemp!=NULL)) { printf("%-10s",pTemp->item.start_stat); printf("%-10s",pTemp->item.end_stat); printf("%-12s",pTemp->item.go_time); printf("%-14s",pTemp->item.go_data); printf("%-12s",pTemp->item.train_num); printf("%-13s",pTemp->item.all_time); printf("%-d",pTemp->item.ticket_lea); printf("n"); pTemp=pTemp->next; //移动临时指针到下一个结点 } } //查询车票信息 int inquire(struct node *pHead) { int flag = 0; struct node *pTemp; char inquire_start[20],inquire_end[20]; //查询选择的起始站和终点站 printf("请输入要查询车票的起始站和终点站:"); scanf("%s %s",inquire_start,inquire_end); pTemp=pHead; while(pTemp!=NULL) { if((strcmp(pTemp->item.start_stat,inquire_start)==0) && (strcmp(pTemp->item.end_stat,inquire_end)==0)) { flag = 1; printf("n车票信息结果如下:n"); printf("起始站 终点站 出发时间 出发日期 车次 旅途时间 余票量n"); printf("%-10s",pTemp->item.start_stat); printf("%-10s",pTemp->item.end_stat); printf("%-12s",pTemp->item.go_time); printf("%-14s",pTemp->item.go_data); printf("%-12s",pTemp->item.train_num); printf("%-13s",pTemp->item.all_time); printf("%-d",pTemp->item.ticket_lea); } pTemp=pTemp->next; continue; } if(flag == 0) { printf("输入错误!n"); inquire(pHead); } return 0; } //订票 int buy(struct node *pHead) { struct node *pTemp; char choice_start[20],choice_end[20]; int numbers; char buy_name[10]; char wy; pTemp=pHead; printf("请输入所购买车票的起始站、终点站和票数:"); scanf("%s %s %d",choice_start,choice_end,&numbers); while(pTemp!=NULL) { if((strcmp(pTemp->item.start_stat,choice_start)==0)&&(strcmp(pTemp->item.end_stat,choice_end)==0)) { if(numbers<=pTemp->item.ticket_lea) { printf("找到符合信息的车次:n"); printf("起始站 终点站 出发时间 出发日期 车次 旅途时间 余票量n"); printf("%-10s",pTemp->item.start_stat); printf("%-10s",pTemp->item.end_stat); printf("%-11s",pTemp->item.go_time); printf("%-12s",pTemp->item.go_data); printf("%-10s",pTemp->item.train_num); printf("%-13s",pTemp->item.all_time); printf("%-d",pTemp->item.ticket_lea); printf("n"); printf("请您输入姓名:"); scanf("%s",buy_name); printf("正在办理订票......n"); printf("恭喜您办理成功!n"); pTemp->item.ticket_lea=pTemp->item.ticket_lea - numbers; strcpy(lg[len].name,buy_name); lg[len].num=numbers; len++; return 0; } else { printf("您所需要的票数超过余票数,请问是否继续办理(Y/y || N/n)?n"); getchar(); scanf("%c",&wy); if(wy == 'Y' || wy == 'y') buy(pHead); else if(wy == 'N' || wy=='n' ) { printf("谢谢使用,按任意键返回!n"); getch(); return 0; } } } else pTemp=pTemp->next; } printf("n很遗憾,未找到您需要的车次,请重新订票!n"); buy(pHead); return 0; } //退票 int back(struct node *pHead) { struct node *pTemp; int i; char wy; //判断yes or no char back_name[10]; //退票人姓名 int back_num; //退票数 char back_start[20]; //退票起始站 char back_end[20]; //退票终点站 printf("请输入要退票人姓名和退票数:"); scanf("%s%d",back_name,&back_num); printf("请输入退票的起始站和终点站:"); scanf("%s%s",back_start,back_end); pTemp=pHead; while(pTemp!=NULL) { if((strcmp(pTemp->item.start_stat,back_start)==0)&&(strcmp(pTemp->item.end_stat,back_end)==0)) { for(i=0;i item.ticket_lea=pTemp->item.ticket_lea + back_num; //办理成功,该车次票数增加 return 0; } else { printf("未找到您定的票,请问您是否重输信息继续进行退票(Y/y || N/n):"); getchar(); scanf("%c",&wy); if(wy=='Y' || wy =='y') back(pHead); else if(wy=='N' || wy == 'n') { printf("谢谢使用,按任意键返回!n"); getch(); return 0; } } } } else pTemp=pTemp->next; } printf("n很遗憾,未找到您要退票的车次,请重新退票!n"); back(pHead); return 0; } //从文件中读取信息 struct node *read_inf() //从磁盘文件中读取信息并存入单链表 { struct node *head, *r, *train; //定义结构体指针变量 struct node是类型 //head为头结点(头结点中有信息),r为尾节点, train为当前节点 FILE *fp; if((fp=fopen("information.txt","rt"))==NULL) { printf("读文件出错,按任意键退出"); getch(); exit(1); } head=(struct node *)malloc(sizeof(struct node)); //初始化 head->next=NULL; fscanf(fp,"%s %s %s %s %s %s %d",head->item.start_stat,head->item.end_stat, head->item.go_time,head->item.go_data,head->item.train_num,head->item.all_time,&head->item.ticket_lea); r=head; //r是尾节点 while(!feof(fp)) //文件末结束 { train=(struct node *)malloc(sizeof(struct node)); //建立链表 fscanf(fp,"%s %s %s %s %s %s %d",train->item.start_stat,train->item.end_stat, train->item.go_time,train->item.go_data,train->item.train_num,train->item.all_time,&train->item.ticket_lea); r->next=train; //链表节点 r=train; } r->next=NULL; fclose(fp); printf("n文件中信息以正确读出,按任意键返回!"); getch(); //清除缓冲区 system("cls"); return head; } //主界面 void meau() { printf("n"); printf("t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n"); printf("t☆==============欢迎使用车票管理系统==============☆n"); printf("t☆~~~~~~~~~~~~~~~1.存入车票信息~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~2.显示车票信息~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~3.查询车票信息~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~4.增加车票信息~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~5.统计 与 排序~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~6. 订 票~~~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~7. 退 票~~~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆~~~~~~~~~~~~~~~8.退出管理系统~~~~~~~~~~~~~~~~~~~☆n"); printf("t☆================================================☆n"); printf("t☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆n"); printf("请选择编号(1-8)选择功能进行相应的操作:"); } //链表长度,为了更好的排序 int listlength(struct node *pHead) //判断链表的长度 进而知道循环次数 { struct node *current; int len=0; current=pHead; while(current!=NULL) { len++; //遍历一篇 len自增 表示最后链表的长度 current=current->next; } return len; } //排统计序 void Sort(struct node *pHead) { int len; struct node *current; current=pHead; len=listlength(pHead); //上面一个函数的功能判断链表的长度 printf("共有%d个信息n", len); while(len>1) { //冒泡排序 while(current->next != NULL) { if(strcmp(current->item.all_time, current->next->item.all_time)>0) //比较时间 { Item temp; //定义一个交换变量 temp=current->item; current->item=current->next->item; current->next->item=temp; } current=current->next; } len--; current=pHead; //每次从头开始遍历 } output(pHead); //进去输出函数 return; } //主函数 int main() { system("color 4"); printf("欢");sleep(0); printf("迎");sleep(1); system("color 3"); printf("使");sleep(0); printf("用");sleep(1); system("color 2"); printf("车");sleep(0); printf("票");sleep(1); system("color 1"); printf("管");sleep(0); printf("理");sleep(1); system("color 6"); printf("系");sleep(0); printf("统n");sleep(2); printf("tt"); printf("n"); system("color 8"); printf("ttt即将进入登陆注册页面请稍候....."); sleep(3); system("cls"); system("color 3"); int choice=8; struct node *pHead; //定义头结点 //选择编号 while(choice != 10) { meau(); scanf("%d",&choice); switch(choice) { case 1:system("cls"); pHead=read_inf(); break; case 2:system("cls"); output(pHead); break; case 3:system("cls"); inquire(pHead); break; case 4:system("cls"); add(pHead); save_inf(pHead); break; case 5:system("cls"); Sort(pHead); break; case 6:system("cls"); buy(pHead); break; case 7:system("cls"); back(pHead); break; case 8:exit(1); default:printf("请输入正确的编号!n"); break; } } }



