C語言實現(xiàn)天氣信息管理系統(tǒng)
更新時間:2020年06月16日 15:14:21 作者:Sixology.
這篇文章主要介紹了C語言實現(xiàn)天氣信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
本文實例為大家分享了C語言實現(xiàn)天氣信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下
#include<stdio.h> #include<stdlib.h> #include<string.h> #include<windows.h> #include<time.h> #include<unistd.h> #define TRUE 1 #define FALSE 0 #define OK 1 #define ERROR 0 #define OVERFLOW -1 typedef int Status; typedef int ElemType; typedef struct { char Sweather[10]; //天氣狀況 double Htem; //最高溫度 double Ltem; //最低溫度 double Stem; //溫度 double Shum; //濕度 }area; typedef struct node { int num; //城市編號 area weather; //地區(qū)天氣 char name[5]; //地名 struct node *next; }*LinkList,LNode; //定義結(jié)構(gòu)體 int NUM=0; //全局變量 計算節(jié)點數(shù)目 Status CreatList_L(LinkList &L,int n); //信息錄入 void Print_LinkList( LinkList H); //查看信息 int login(); //登錄 Status Delete_LinkList(LinkList &H); //刪除節(jié)點 Status GetElem_L(LinkList &L); //查找 Status changeElem_L(LinkList &L); //修改 int Clearlist(LinkList &L); //整表刪除, void welcome(LinkList &L); //welcome void menu2(LinkList &L); //管理員菜單 void menu1(LinkList &L); //用戶菜單 void printf_node(node*p); //輸出節(jié)點 void my_return(LinkList &L); //return void clothes(node *p); //穿衣指數(shù) void save_node(LinkList &L,int i); //保存節(jié)點到文件 void read_node(LinkList &L) ; //從文件讀取 int Register(); //注冊 int signin(); //登錄 void read_node(LinkList &L) //從文件讀取 { LNode *p,*pr; int i,n; pr=L; FILE *fp; if((fp=fopen("weatherinformation.txt","r"))==NULL) { printf("打開文件失敗"); exit(0); } fscanf(fp,"%d",&n); //從文件讀出節(jié)點數(shù)目 for(i=1;i<=n;i++) { p=(LinkList)malloc(sizeof(LNode)); fscanf(fp,"%d",&p->num); fscanf(fp,"%s",p->name); fscanf(fp,"%s",p->weather.Sweather); fscanf(fp,"%lf%lf",&p->weather.Ltem,&p->weather.Htem); p->weather.Stem=(p->weather.Htem+p->weather.Ltem)/2; fscanf(fp,"%lf",&p->weather.Shum); p->next=NULL; while(pr->next!=NULL){ pr=pr->next; } p->next=pr->next; pr->next=p; pr=pr->next; NUM++; } fclose(fp); } void save_node(LinkList &L) //保存到文件 { LNode *p,*pr; pr=L; FILE *fp; if((fp=fopen("weatherinformation.txt","w"))==NULL) { printf("打開文件失敗"); exit(0); } fprintf(fp,"%d\n",NUM); while(pr->next!=NULL) { p=pr->next; fprintf(fp,"%d ",p->num); fprintf(fp,"%s ",p->name); fprintf(fp,"%s ",p->weather.Sweather); fprintf(fp,"%lf %lf ",p->weather.Ltem,p->weather.Htem); fprintf(fp,"%lf\n",p->weather.Shum); pr=pr->next; } printf("保存成功!??!"); fclose(fp); } int Register() //注冊 { FILE* fp; char name[10],passworld[10]; if((fp=fopen("demo.txt","a"))==NULL) { printf("打開文件失敗"); exit(0); } printf("請輸入用戶名:"); scanf("%s",name); fprintf(fp,"%s ",name); printf("請輸入密碼:"); scanf("%s",passworld); fprintf(fp,"%s\n",passworld); fclose(fp); printf("注冊成功!"); return OK; } int signin() //登錄 { FILE* fp; char name[10],passworld[10]; //用戶輸入的賬戶密碼 char name1[10],passworld1[10]; //從文件讀取的賬戶和密碼 int flag=0; if((fp=fopen("demo.txt","r"))==NULL) { printf("打開文件失敗"); exit(0); } printf("輸入用戶名:"); scanf("%s",name); printf("輸入密碼:"); scanf("%s",passworld); while(!flag&&!feof(fp)) { fscanf(fp,"%s",name1); fscanf(fp,"%s",passworld1); if(strcmp(name,name1)==0&&strcmp(passworld,passworld1)==0) flag=1; } fclose(fp); return flag; } int login() //login { char f; int H; char a[10],ah[10],am[10]; char b[10],bh[10],bm[10]; FILE *fp; printf("1.注冊!\n"); printf("2.登錄!\n"); scanf("%d",&H); if(H==1) { Register(); while(1){ printf("是否登錄?y or n\n"); getchar(); scanf("%c",&f); system("cls"); if(f=='n') exit(0); else if(f=='y') { if(signin()) { printf("登錄成功!\n"); return OK; } else printf("密碼或者用戶錯誤!\n"); } } } else if(H==2) while(1){ if(signin()) { printf("登錄成功!\n"); return OK; } else printf("密碼或者用戶錯誤!\n"); } return 0; } void clothes(node *p) //穿衣指數(shù) { if(p->weather.Stem>=28) printf("夏季著裝:輕棉織物制作的短衣、短裙、薄短裙、短褲\n\n"); else if(p->weather.Stem>=24&&p->weather.Stem<28) printf("夏季著裝:棉麻面料的襯衫、薄長裙、薄T恤\n\n"); else if(p->weather.Stem>=21&&p->weather.Stem<24) printf("春秋過渡裝:單層棉麻面料的短套裝、T恤衫、薄牛仔衫褲、休閑服、職業(yè)套裝\n\n"); else if(p->weather.Stem>=18&&p->weather.Stem<21) printf("春秋過渡裝:套裝、夾衣、風衣、休閑裝、夾克衫、西裝、薄毛衣\n\n"); else if(p->weather.Stem>=15&&p->weather.Stem<18) printf("春秋著裝:風衣、大衣、夾大衣、外套、毛衣、毛套裝、西裝、防寒服\n\n"); else if(p->weather.Stem>=11&&p->weather.Stem<15) printf("秋冬著裝:毛衣、風衣、毛套裝、西服套裝\n\n"); else if(p->weather.Stem>=6&&p->weather.Stem<11) printf("冬季著裝:棉衣、冬大衣、皮夾克、厚呢外套、呢帽、手套、羽絨服、皮襖\n\n"); else printf("冬季著裝:棉衣、冬大衣、皮夾克、厚呢外套、呢帽、手套、羽絨服、皮襖\n\n"); } Status CreatList_L(LinkList &L) /* 信息錄入 */ { LNode *p,*pr; int i,n; printf("請輸入地區(qū)數(shù)"); scanf("%d",&n); pr=L; for(i=n;i>0;i--) { p=(LinkList)malloc(sizeof(LNode)); printf("請輸入城市編號\n"); scanf("%d",&p->num); printf("請輸入地名\n"); scanf("%s",p->name); printf("請輸入該地區(qū)的天氣情況\n"); scanf("%s",p->weather.Sweather); printf("最低溫度和最高溫度\n"); scanf("%lf%lf",&p->weather.Ltem,&p->weather.Htem); p->weather.Stem=(p->weather.Htem+p->weather.Ltem)/2; printf("相對濕度\n"); scanf("%lf",&p->weather.Shum); p->next=NULL; while(pr->next!=NULL){ pr=pr->next; } p->next=pr->next; pr->next=p; pr=pr->next; NUM++; } return OK; } void printf_node(node*p) //輸出一個節(jié)點 { printf("%s的天氣為:%s\n",p->name,p->weather.Sweather); printf("最低溫度為:%.2lf度,最高溫度為:%.2lf度,平均溫度為:%.2lf度\n",p->weather.Ltem,p->weather.Htem,p->weather.Stem); printf("相對濕度為:%.1lf%%\n",p->weather.Shum); clothes(p); } void my_return(LinkList &L,int n) //my_return { char f; while(1){ printf("是否返回菜單? y or n\n"); getchar(); scanf("%c",&f); if((f=='y'||f=='Y')) { if(n==1) menu1(L); else if(n==2) menu2(L); } else if(f=='n'||f=='N') { printf("bye-bye"); exit(0); } } } void Print_LinkList( LinkList H) /* 輸出鏈式表 */ { LNode *p; p=H->next; if(p==NULL){ printf("沒有存入數(shù)據(jù)\n"); return ; } while(p!=NULL) { printf_node(p); p=p->next; } printf("\n"); } Status Delete_LinkList(LinkList &H) /* 刪除表序號為i的記錄 */ { int i; int j=1; LNode *p,*pr; p=H; if(NUM==0){ printf("沒有存入數(shù)據(jù)\n"); return 0; } printf("請輸入城市編號\n"); scanf("%d",&i); while(p&&i!=p->next->num) { p=p->next; } if(!p) { printf("沒有這個城市\(zhòng)n"); return ERROR;} pr=p->next; p->next=pr->next; free(pr); printf("刪除成功!\n"); NUM--; return OK; }/* Delete_LinkList */ int Clearlist(LinkList &L) //整表刪除, { LNode *p,*q; system("cls"); printf("請確認你是否已經(jīng)獲得最高權(quán)限?y or n\n"); getchar(); getchar(); printf("ERROR!你沒有最高權(quán)限!"); exit(0); p=L->next; while(p) { q=p->next ; free(p); p=q; NUM--; } L->next=NULL; save_node(L); return 1; } Status GetElem_L(LinkList &L) //查找 { int num; char a[5]; int j=1; printf("請輸入城市名稱\n"); scanf("%s",&a); LinkList p; p=L->next; while(p&&strcmp(p->name,a)!=0) { p=p->next; } if(!p){ printf("沒有這個城市!"); return ERROR; } printf_node(p); return OK; } Status changeElem_L(LinkList &L) //修改 { int num; int j=1; printf("請輸入城市編號\n"); scanf("%d",&num); LinkList p; p=L->next; while(p&&num!=p->num) { p=p->next; } if(!p){printf("沒有這個城市!\n"); return ERROR; } printf_node(p); printf("請修改:\n"); printf("請輸入地名\n"); scanf("%s",p->name); printf("請輸入城市編號\n"); scanf("%d",&p->num); printf("請輸入該地區(qū)的天氣情況\n"); scanf("%s",p->weather.Sweather); printf("最高溫度和最低溫度\n"); scanf("%lf%lf",&p->weather.Htem,&p->weather.Ltem); p->weather.Stem=(p->weather.Htem+p->weather.Ltem)/2; printf("相對濕度\n"); scanf("%lf",&p->weather.Shum); printf("修改后的信息為:\n"); printf_node(p); return OK; } void menu1(LinkList &L) //用戶菜單 { int choose; system("cls"); printf("\n\n"); printf("\t\t\t****************用戶菜單****************\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 祝您使用愉快 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 查找信息請按 1 -- 全覽請按 2 *\n"); printf("\t\t\t* 退出請按 3 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* *\n"); printf("\t\t\t****************************************\n"); printf("\n\t\t\t\t 進入管理員菜單請按0\n"); scanf("%d",&choose); switch(choose) { case 0:menu2(L);break; case 1:GetElem_L(L); my_return(L,1);break; case 2:Print_LinkList(L); my_return(L,1);break; case 3:exit(0) ;break; default:menu1(L); } } void menu2(LinkList &L) //管理員菜單 { int choose; system("cls"); printf("\n\n"); printf("\t\t\t****************管理員菜單****************\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 信息錄入請按 1 -- 刪除信息請按 2 *\n"); printf("\t\t\t* 信息查找請按 3 -- 信息修改請按 4 *\n"); printf("\t\t\t* 查看信息請按 5 -- 保存并退出按 6 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t* 清除所有數(shù)據(jù)按8 *\n"); printf("\t\t\t* *\n"); printf("\t\t\t******************************************\n"); printf("\n\t\t\t\t 進入用戶菜單請按0\n"); scanf("%d",&choose); switch(choose) { case 0:menu1(L);break; case 1:CreatList_L(L) ;my_return(L,2);break; case 2:Delete_LinkList(L) ;my_return(L,2);break; case 3:GetElem_L(L) ;my_return(L,2);break; case 4:changeElem_L(L); my_return(L,2);break; case 5:Print_LinkList(L); my_return(L,2);break; case 6:save_node(L);exit(0); case 8:Clearlist(L);break; default :menu2(L); } } void welcome(LinkList &L) //welcome { int a; login(); printf("用戶登錄請按1\n"); printf("管理員登錄請按2\n"); while(3>2) { scanf("%d",&a); if(a==1) { menu1(L); break; } else if(a==2) { menu2(L); break; } else { printf("輸入錯誤!請重新輸入\n"); continue; } } } int main() //main { int i=0; LinkList L; L=(LNode*)malloc(sizeof(LNode)); L->next=NULL; printf("\n\n\n\n\t\t\t正在從文件中讀取數(shù)據(jù)請稍后"); read_node(L); while(i<3) { printf("."); sleep(1); i++; } printf("\n\n\t\t\t讀取成功??!\n"); system("pause"); system("cls"); welcome(L); return 0; }
更多學習資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
用C++實現(xiàn)strcpy(),返回一個char*類型的深入分析
本篇文章是對用C++實現(xiàn)strcpy(),返回一個char*類型進行了詳細的分析介紹,需要的朋友參考下2013-05-05fatal error LNK1104: 無法打開文件“l(fā)ibc.lib”的解決方法
本篇文章是對fatal error LNK1104: 無法打開文件“l(fā)ibc.lib”的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05C++Node類Cartographer開始軌跡的處理深度詳解
這篇文章主要介紹了C++Node類Cartographer開始軌跡的處理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習吧2023-03-03