C語言實現(xiàn)旅游資訊管理系統(tǒng)
本文實例為大家分享了C語言實現(xiàn)旅游資訊管理系統(tǒng)的具體代碼,供大家參考,具體內容如下
題目:
一、主體功能點要求
1.設計主菜單實現(xiàn)用戶交互
a、添加旅游資訊記錄
每條記錄至少包含如下項:編號、日程安排、費用、點贊數(shù)。添加旅游資訊記錄時,要求鍵盤輸入對應的編號、日程安排等信息。添加成功后屏幕打印出相應的提示信息。
b、查詢旅游資訊記錄
查詢旅游資訊記錄時,打印相應提示語句,用戶輸入“1~3”之間的整數(shù),如果輸入1,按編號大小升序排序顯示所有的記錄;如果輸入2,按點贊數(shù)降序排序顯示所有的記錄;如果輸入3,則提示輸入記錄的編號,然后單獨顯示該編號對應的記錄(若無該編號的記錄,打印出錯的提示信息,并返回主菜單)。
c、修改旅游資訊記錄
修改旅游資訊記錄時,打印相應提示語句,輸入待修改記錄的編號(若無該編號的記錄,打印出錯的提示信息,并返回主菜單),然后輸入需修改記錄的字段名稱,比如編號、日程安排、費用等(點贊數(shù)不能在此處修改),再輸入相應字段修改后的值。
d、刪除旅游資訊記錄
刪除旅游資訊記錄時,打印相應提示語句,輸入待刪除記錄的編號(若無該編號的記錄,打印出錯的提示信息,并返回主菜單),然后打印是否刪除的提示語句,輸入y,刪除選中的記錄,否則不進行刪除操作。
e、點贊旅游資訊記錄
點贊旅游資訊記錄時,打印相應提示語句,輸入待刪除記錄的編號(若無該編號的記錄,打印出錯的提示信息,并返回主菜單),該記錄的點贊數(shù)增1。
2、擴展要求:
能夠實現(xiàn)將編輯完畢的旅游資訊記錄保存在txt文件中,每次重新打開程序能夠導入之前存儲的旅游資訊記錄。
二、編程要求
1、注意每條旅游資訊記錄至少包含編號、日程安排、費用、點贊數(shù)這四個字段,并且要求將字段的信息定義為一個結構體。
2、若采用鏈表存儲每條旅游資訊記錄,則屬于擴展實現(xiàn),可加分。
3、注意將程序的功能點進行模塊化設計,避免將全部功能點實現(xiàn)代碼寫在主函數(shù)main中。
#include<stdio.h> #include<stdlib.h> #include<conio.h> #include<string.h> ?typedef struct Tour *tour,TOUR; ? ? struct Tour ?? ?{ ?? ??? ?int id;//編號 ?? ??? ?char plan[30];//日程安排 ?? ??? ?float cost;//花費 ?? ??? ?int agree;//點贊數(shù) ?? ??? ?tour next; ?? ?}; ?? ?tour head,tail; void read_tour();// 從data.txt中讀取信息保存到單鏈表中 void write_cars();//把旅游資訊記錄存儲到data.txt中 void add_tour();//添加旅游資訊記錄 void search_tour();//查詢旅游資訊記錄 void display_tourid();//按編號大小來顯示旅游資訊記錄 void display_touragree();//按點贊數(shù)大小來顯示旅游資訊記錄 void display();//將所有的旅游資訊記錄輸出到顯示器中 void search_tourid();//按照編號來查詢某個旅游資訊記錄 void change_tour();//修改旅游資訊記錄 void delect_tour();//刪除旅游資訊記錄 void agree_tour();//點贊某個旅游資訊記錄 int main(){ ?? ?printf("==========歡迎使用旅游資訊管理系統(tǒng)==========\n"); ?? ?read_tour();//讀取文件 ?? ?int i; ?? ?while(true)//每當執(zhí)行完一個功能時,都會自動顯示主菜單 ?? ?{ ?? ??? ?while(1)//判斷數(shù)字輸入是否正確,如果不正確繼續(xù)循環(huán)輸入 ?? ??? ?{ ?? ??? ??? ?printf("請選擇相關操作:\n1.增加旅游資訊記錄\n2.查詢旅游資訊記錄\n3.瀏覽旅游資訊記錄\n"); ?? ??? ??? ?printf("4.修改旅游資訊記錄\n5.刪除旅游資訊記錄\n6.點贊旅游資訊記錄\n7.保存數(shù)據(jù)并退出管理系統(tǒng)\n"); ?? ? ? ? ? ?printf("請輸入數(shù)字選擇要實現(xiàn)的功能:\n"); ?? ??? ??? ?scanf("%d",&i); ?? ??? ??? ?if(i>=1&&i<=7) ?? ??? ??? ?{ ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?else ?? ??? ??? ?{ ?? ??? ??? ??? ?printf("數(shù)字錯誤,請重新輸入"); ?? ??? ? ? ?} ?? ??? ?} ?? ??? ?switch(i) ?? ??? ?{ ?? ??? ?case 1: add_tour();;break;//進入添加旅游資訊信息功能 ?? ??? ?case 2: search_tour();;break;//進入查詢旅游資訊信息功能 ?? ??? ?case 3: display();break;//進入瀏覽旅游資訊信息功能 ?? ??? ?case 4: change_tour();;break;//進入修改旅游資訊信息功能 ?? ??? ?case 5: delect_tour();break;//進入刪除旅游資訊信息功能 ?? ??? ?case 6: agree_tour();break;//進入點贊功能 ?? ??? ?case 7: write_cars();//把數(shù)據(jù)信息保存到文件里 ?? ??? ??? ?printf("謝謝使用!\n"); ?? ??? ??? ?exit(0); ?? ??? ?} ?? ?} ?? ?return 0; } void read_tour(){ ?? ?FILE *fp; ?? ?if (0 != fopen_s(&fp, "data.txt", "a+b")) ?? ?{ ?? ??? ?perror("打開文件失敗,原因是"); ?? ??? ?getch(); ?? ??? ?exit(1); ?? ?} ?? ?tour T; ?? ?head = (tour)malloc(sizeof(TOUR)); ?? ?if (NULL == head) ?? ?{ ?? ??? ?printf("內存分配失敗!\n"); ?? ??? ?exit(EXIT_FAILURE); ?? ?} ?? ?head->next = NULL; ?? ?tail = head; ?? ?while (1) ?? ?{ ?? ??? ?T= (tour)malloc(sizeof(TOUR)); ?? ??? ?if (fread(T, sizeof(TOUR), 1, fp) == 0) ?? ??? ?{ ?? ??? ??? ?free(T); ?? ??? ??? ?break; ?? ??? ?} ?? ??? ?T->next = NULL; ?? ??? ?tail->next = T; ?? ??? ?tail = T; ?? ?} ?? ?fclose(fp);//關閉文件 } void write_cars() { ?? ?FILE *fp; ?? ?if (0 != fopen_s(&fp, "data.txt", "w+")) ?? ?{ ?? ??? ?perror("打開文件失敗,原因是"); ?? ??? ?_getch(); ?? ??? ?return; ?? ?} ?? ?tour T = head->next; ?? ?while (T != NULL) ?? ?{ ?? ??? ?fwrite(T, sizeof(TOUR), 1, fp); ?? ??? ?T = T->next; ?? ?} ?? ?fclose(fp);//關閉文件 } void add_tour() { ?? ?tour T,temp; ?? ?T=(tour)malloc(sizeof(TOUR)); ?? ?if(T==NULL) ?? ?{ ?? ??? ?printf("空間分配失??!"); ?? ? ? ?exit(1); ?? ?} ?? ?printf("請輸入編號:"); ?? ?scanf("%d",&T->id); ?? ?printf("請輸入日程安排:"); ?? ?scanf("%s",T->plan); ?? ?printf("請輸入費用:"); ?? ?scanf("%f",&T->cost); ?? ?printf("請輸入點贊數(shù):"); ?? ?scanf("%d",&T->agree); ?? ?if(head->next==NULL) ?? ?{ ?? ??? ?head->next=T; ?? ??? ?T->next=NULL; ?? ?}else ?? ?{ ?? ??? ?temp=head->next;//頭插法 ?? ??? ?head->next=T; ?? ??? ?T->next=temp; ?? ?} ?? ?printf("%-15s|%-15s|%-15s|%-15s\n", ?? ??? ?"編號", "日程安排", "費用", "點贊數(shù)"); ?? ?printf("%-16d%-16s%-16.1f%-7d%\n",T->id,T->plan,T->cost,T->agree); } void search_tour(){ ?? ?int i; ?? ?while(1){ ?? ??? ?printf("1.按編號大小升序排序顯示所有的記錄\n2.按點贊數(shù)降序排序顯示所有的記錄\n3.輸入編號查詢記錄\n"); ?? ??? ?printf("請選擇查詢的方式:\n"); ?? ??? ?scanf("%d",&i); ?? ??? ?if(i>=1&&i<4)break; ?? ??? ?else ?? ??? ??? ?printf("輸入的數(shù)字錯誤,請重新輸入:\n"); ?? ?} ?? ?switch(i){ ?? ?case 1:display_tourid();break; ?? ?case 2:display_touragree();break; ?? ?case 3:search_tourid(); ?? ?} } void display_tourid(){ ?? ?tour T; ?? ?T=head->next; ?? ?tail=NULL;? ?? ?if(T==NULL||T->next==NULL){ ?? ??? ?printf("目前該系統(tǒng)尚未保存有旅游資訊記錄,返回主菜單!\n"); ?? ??? ?return;//退出 ?? ?} ?? ?while(T!=tail){ ?? ??? ?while(T->next!=tail){ ?? ??? ??? ?if(T->id>T->next->id){ ?? ??? ??? ??? ?int temp=T->id; ?? ??? ??? ??? ?T->id=T->next->id; ?? ??? ??? ??? ?T->next->id=temp; ?? ??? ??? ??? ?char tempplan[30]; ?? ??? ??? ??? ?strcpy(tempplan, T->plan); ? ?? ??? ??? ??? ?strcpy(T->plan,T->next->plan); ?? ??? ??? ??? ?strcpy(T->next->plan,tempplan);? ?? ??? ??? ??? ?float tempcost=T->cost; ?? ??? ??? ??? ?T->cost=T->next->cost; ?? ??? ??? ??? ?T->next->cost=tempcost; ?? ??? ??? ??? ?int tempagree=T->agree; ?? ??? ??? ??? ?T->agree=T->next->agree; ?? ??? ??? ??? ?T->next->agree=tempagree; ?? ??? ??? ?} ?? ??? ??? ?T=T->next; ?? ??? ?} ?? ??? ?tail=T; ?? ??? ?T=head; ?? ?} ?? ?display();//將信息輸出到顯示器中 } void display_touragree(){ ?? ?tour T; ?? ?T=head->next; ?? ?tail=NULL;? ?? ?if(T==NULL||T->next==NULL){ ?? ??? ?printf("目前該系統(tǒng)尚未保存有旅游資訊記錄,返回主菜單!\n"); ?? ??? ?return; ?? ?} ?? ?while(T!=tail){ ?? ??? ?while(T->next!=tail){ ?? ??? ??? ?if(T->agree>T->next->agree){ ?? ??? ??? ??? ?int temp=T->id; ?? ??? ??? ??? ?T->id=T->next->id; ?? ??? ??? ??? ?T->next->id=temp; ?? ??? ??? ??? ?char tempplan[30]; ?? ??? ??? ??? ?strcpy(tempplan, T->plan); ? ?? ??? ??? ??? ?strcpy(T->plan,T->next->plan); ?? ??? ??? ??? ?strcpy(T->next->plan,tempplan);? ?? ??? ??? ??? ?float tempcost=T->cost; ?? ??? ??? ??? ?T->cost=T->next->cost; ?? ??? ??? ??? ?T->next->cost=tempcost; ?? ??? ??? ??? ?int tempagree=T->agree; ?? ??? ??? ??? ?T->agree=T->next->agree; ?? ??? ??? ??? ?T->next->agree=tempagree; ?? ??? ??? ?} ?? ??? ??? ?T=T->next; ?? ??? ?} ?? ??? ?tail=T; ?? ??? ?T=head; ?? ?} ?? ?display();//將信息輸出到顯示器中 } void search_tourid(){ ?? ?tour T; ?? ?T=head->next; ?? ?printf("請輸入要查找的編號:"); ?? ?int searchid; ?? ?scanf("%d",&searchid); ?? ?int j=0; ?? ?printf("%-15s|%-15s|%-15s|%-15s\n", ?? ??? ?"編號", "日程安排", "費用", "點贊數(shù)"); ?? ?while(T!=NULL) ?? ?{ ?? ??? ?if(T->id ==searchid) ?? ??? ?{ ?? ??? ??? ?printf("%-16d%-16s%-16.1f%-7d%\n",T->id,T->plan,T->cost,T->agree); ?? ??? ??? ?T=T->next; ?? ??? ??? ?j++; ?? ??? ?} ?? ??? ?else ?? ??? ?T=T->next; ?? ?} ?? ??? ?if(j==0) ?? ??? ?{ ?? ??? ??? ?printf("該系統(tǒng)無該編號的旅游信息\n"); ?? ??? ?} } void display(){ ?? ?tour T=head->next; ?? ?if(NULL == head->next) ? ? { ? ? ? printf("無旅游信息\n"); ? ? return ; ? ? } ?? ?printf("%-15s|%-15s|%-15s|%-15s\n", ?? ??? ?"編號", "日程安排", "費用", "點贊數(shù)"); ?? ?for(;T!=NULL;T=T->next) ?? ?{ ?? ??? ?printf("%-16d%-16s%-16.1f%-7d%\n",T->id,T->plan,T->cost,T->agree); ?? ??? ? ?? ?} } void change_tour(){ ?? ?int j=0; ?? ?tour T; ?? ?T=head->next; ?? ?int changeid; ?? ?printf("請輸入待修改的編號:"); ?? ?scanf("%d",&changeid); ?? ?for(;T!=NULL;T=T->next){ ?? ??? ?if(T->id==changeid){ ?? ??? ??? ?j++; ?? ??? ??? ?char arr[30]; ?? ??? ??? ?printf("請輸入要修改的項目:編號、日程安排、費用\n"); ?? ??? ??? ?scanf("%s",arr); ?? ??? ??? ?if (strcmp(arr,"編號")==0){ ?? ??? ??? ??? ?printf("請輸入修改后的值:"); ?? ??? ??? ??? ?int changeid; ?? ??? ??? ??? ?scanf("%d",&changeid); ?? ??? ??? ??? ?T->id=changeid; ? ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?if (strcmp(arr,"日程安排")==0){ ?? ??? ??? ??? ?printf("請輸入修改后的值:"); ?? ??? ??? ??? ?char str[20]; ?? ??? ??? ??? ?scanf("%s",str); ?? ??? ??? ??? ?strcpy(T->plan, str);? ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ??? ?if (strcmp(arr,"費用")==0){ ?? ??? ??? ??? ?printf("請輸入修改后的值:"); ?? ??? ??? ??? ?float changecost; ?? ??? ??? ??? ?scanf("%f",&changecost); ?? ??? ??? ??? ?T->cost=changecost; //賦值 ?? ??? ??? ??? ?break; ?? ??? ??? ?} ?? ??? ?} ?? ?} ? ? ? ? ? if(j==0){ ?? ??? ??? ?printf("系統(tǒng)無該編號的信息\n"); ?? ??? ??? ?exit(1); ?? ??? ? ?} } void delect_tour(){ ?? ?int j=0; ?? ?tour T,temp; ?? ?T=head; ?? ?int delectid; ?? ?printf("請輸入待刪除的編號:"); ?? ?scanf("%d",&delectid); ?? ?getchar(); ?? ?while(T->next!=NULL) ?? ?{ ?? ??? ?if(T->next->id==delectid) ?? ??? ?{ ?? ??? ??? ?j++; ?? ??? ??? ?printf("是否要刪除(Y/N),請選擇:\n"); ?? ??? ??? ?char ch; ?? ??? ??? ?scanf("%c",&ch); ?? ??? ??? ?if(ch=='y'||ch=='Y'){ ?? ??? ??? ? ?temp=T->next; ? ? ? ? ? ? ? T->next = T->next->next; ?? ??? ??? ? ?free(temp); ?? ??? ??? ? ?printf("數(shù)據(jù)刪除成功!\n"); ?? ??? ??? ? ?break; ?? ??? ??? ?}else{ ?? ??? ??? ??? ?printf("不進行刪除操作!\n"); ?? ??? ??? ??? ?exit(0); ?? ??? ??? ?} ?? ??? ?} ?? ??? ?else ?? ??? ?T=T->next; ?? ?} ?? ?if(j==0){ ?? ??? ??? ?printf("系統(tǒng)無該編號的信息\n"); ?? ??? ??? ?exit(0); ?? ??? ?} } void agree_tour(){ ?? ?int j=0; ?? ?tour T; ?? ?T=head; ?? ?int agreeid; ?? ?printf("請輸入待點贊的編號:"); ?? ?scanf("%d",&agreeid); ?? ?getchar(); ?? ?for(;T!=NULL;T=T->next){ ?? ??? ?if(T->next->id==agreeid){ ?? ??? ??? ?j++; ? ? ? ? ? ? printf("是否要刪除(Y/N),請選擇:\n"); ?? ??? ??? ?char ch; ?? ??? ??? ?scanf("%c",&ch); ?? ??? ??? ?if(ch=='y'||ch=='Y'){ ?? ??? ??? ? ?T->next->agree=T->next->agree+1;//點贊數(shù)+1 ?? ??? ??? ? ?break; ?? ??? ??? ?}else{ ?? ??? ??? ??? ?printf("不進行點贊操作!\n"); ?? ??? ??? ??? ?exit(0); ?? ??? ??? ?} ?? ??? ?} ?? ?} ?? ? ? ? if(j==0){ ?? ??? ??? ?printf("系統(tǒng)無該編號的信息\n"); ?? ??? ??? ?exit(0); ?? ? ? ? } }
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關文章
詳談全排列next_permutation() 函數(shù)的用法(推薦)
下面小編就為大家?guī)硪黄斦勅帕衝ext_permutation() 函數(shù)的用法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-03-03json格式解析和libjson的用法介紹(關于cjson的使用方法)
下面小編就為大家?guī)硪黄猨son格式解析和libjson的用法介紹(關于cjson的使用方法)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-12-12C++數(shù)據(jù)結構與算法的基礎知識和經典算法匯總
終是到了標志著大二結束的期末考試了,對于《算法設計與分析》這門課,我需要總結一下學過的所有算法的思想以及老師補充的關于兩個復雜度和遞歸的概念思想,以及更深層次的理解,比如用畫圖的方式表達出來,我覺得可以用博客記錄總結一下,分享給大家,希望能有所幫助2022-05-05