C語(yǔ)言實(shí)現(xiàn)天氣信息管理系統(tǒng)
本文實(shí)例為大家分享了C語(yǔ)言實(shí)現(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; //城市編號(hào)
area weather; //地區(qū)天氣
char name[5]; //地名
struct node *next;
}*LinkList,LNode; //定義結(jié)構(gòu)體
int NUM=0; //全局變量 計(jì)算節(jié)點(diǎn)數(shù)目
Status CreatList_L(LinkList &L,int n); //信息錄入
void Print_LinkList( LinkList H); //查看信息
int login(); //登錄
Status Delete_LinkList(LinkList &H); //刪除節(jié)點(diǎn)
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é)點(diǎn)
void my_return(LinkList &L); //return
void clothes(node *p); //穿衣指數(shù)
void save_node(LinkList &L,int i); //保存節(jié)點(diǎn)到文件
void read_node(LinkList &L) ; //從文件讀取
int Register(); //注冊(cè)
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("打開(kāi)文件失敗");
exit(0);
}
fscanf(fp,"%d",&n); //從文件讀出節(jié)點(diǎn)數(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("打開(kāi)文件失敗");
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() //注冊(cè)
{
FILE* fp;
char name[10],passworld[10];
if((fp=fopen("demo.txt","a"))==NULL)
{
printf("打開(kāi)文件失敗");
exit(0);
}
printf("請(qǐng)輸入用戶名:");
scanf("%s",name);
fprintf(fp,"%s ",name);
printf("請(qǐng)輸入密碼:");
scanf("%s",passworld);
fprintf(fp,"%s\n",passworld);
fclose(fp);
printf("注冊(cè)成功!");
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("打開(kāi)文件失敗");
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.注冊(cè)!\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("密碼或者用戶錯(cuò)誤!\n");
}
}
}
else if(H==2)
while(1){
if(signin())
{
printf("登錄成功!\n");
return OK;
}
else
printf("密碼或者用戶錯(cuò)誤!\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("夏季著裝:棉麻面料的襯衫、薄長(zhǎng)裙、薄T恤\n\n");
else if(p->weather.Stem>=21&&p->weather.Stem<24)
printf("春秋過(guò)渡裝:?jiǎn)螌用蘼槊媪系亩烫籽b、T恤衫、薄牛仔衫褲、休閑服、職業(yè)套裝\n\n");
else if(p->weather.Stem>=18&&p->weather.Stem<21)
printf("春秋過(guò)渡裝:套裝、夾衣、風(fēng)衣、休閑裝、夾克衫、西裝、薄毛衣\n\n");
else if(p->weather.Stem>=15&&p->weather.Stem<18)
printf("春秋著裝:風(fēng)衣、大衣、夾大衣、外套、毛衣、毛套裝、西裝、防寒服\n\n");
else if(p->weather.Stem>=11&&p->weather.Stem<15)
printf("秋冬著裝:毛衣、風(fēng)衣、毛套裝、西服套裝\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ǐng)輸入地區(qū)數(shù)");
scanf("%d",&n);
pr=L;
for(i=n;i>0;i--)
{
p=(LinkList)malloc(sizeof(LNode));
printf("請(qǐng)輸入城市編號(hào)\n");
scanf("%d",&p->num);
printf("請(qǐng)輸入地名\n");
scanf("%s",p->name);
printf("請(qǐng)輸入該地區(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("相對(duì)濕度\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) //輸出一個(gè)節(jié)點(diǎn)
{
printf("%s的天氣為:%s\n",p->name,p->weather.Sweather);
printf("最低溫度為:%.2lf度,最高溫度為:%.2lf度,平均溫度為:%.2lf度\n",p->weather.Ltem,p->weather.Htem,p->weather.Stem);
printf("相對(duì)濕度為:%.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) /* 輸出鏈?zhǔn)奖?*/
{
LNode *p;
p=H->next;
if(p==NULL){
printf("沒(méi)有存入數(shù)據(jù)\n");
return ;
}
while(p!=NULL)
{
printf_node(p);
p=p->next;
}
printf("\n");
}
Status Delete_LinkList(LinkList &H) /* 刪除表序號(hào)為i的記錄 */
{
int i;
int j=1;
LNode *p,*pr;
p=H;
if(NUM==0){
printf("沒(méi)有存入數(shù)據(jù)\n");
return 0;
}
printf("請(qǐng)輸入城市編號(hào)\n");
scanf("%d",&i);
while(p&&i!=p->next->num)
{
p=p->next;
}
if(!p) {
printf("沒(méi)有這個(gè)城市\(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("請(qǐng)確認(rèn)你是否已經(jīng)獲得最高權(quán)限?y or n\n");
getchar();
getchar();
printf("ERROR!你沒(méi)有最高權(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("請(qǐng)輸入城市名稱(chēng)\n");
scanf("%s",&a);
LinkList p;
p=L->next;
while(p&&strcmp(p->name,a)!=0)
{
p=p->next;
}
if(!p){
printf("沒(méi)有這個(gè)城市!");
return ERROR;
}
printf_node(p);
return OK;
}
Status changeElem_L(LinkList &L) //修改
{
int num;
int j=1;
printf("請(qǐng)輸入城市編號(hào)\n");
scanf("%d",&num);
LinkList p;
p=L->next;
while(p&&num!=p->num)
{
p=p->next;
}
if(!p){printf("沒(méi)有這個(gè)城市!\n");
return ERROR;
}
printf_node(p);
printf("請(qǐng)修改:\n");
printf("請(qǐng)輸入地名\n");
scanf("%s",p->name);
printf("請(qǐng)輸入城市編號(hào)\n");
scanf("%d",&p->num);
printf("請(qǐng)輸入該地區(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("相對(duì)濕度\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* 查找信息請(qǐng)按 1 -- 全覽請(qǐng)按 2 *\n");
printf("\t\t\t* 退出請(qǐng)按 3 *\n");
printf("\t\t\t* *\n");
printf("\t\t\t* *\n");
printf("\t\t\t****************************************\n");
printf("\n\t\t\t\t 進(jìn)入管理員菜單請(qǐng)按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* 信息錄入請(qǐng)按 1 -- 刪除信息請(qǐng)按 2 *\n");
printf("\t\t\t* 信息查找請(qǐng)按 3 -- 信息修改請(qǐng)按 4 *\n");
printf("\t\t\t* 查看信息請(qǐng)按 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 進(jìn)入用戶菜單請(qǐng)按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("用戶登錄請(qǐng)按1\n");
printf("管理員登錄請(qǐng)按2\n");
while(3>2)
{
scanf("%d",&a);
if(a==1)
{ menu1(L);
break;
}
else if(a==2)
{
menu2(L);
break;
}
else
{
printf("輸入錯(cuò)誤!請(qǐng)重新輸入\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ù)請(qǐng)稍后");
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;
}
更多學(xué)習(xí)資料請(qǐng)關(guān)注專(zhuān)題《管理系統(tǒng)開(kāi)發(fā)》。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- C語(yǔ)言通訊錄管理系統(tǒng)完整版
- C語(yǔ)言編寫(xiě)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言實(shí)現(xiàn)圖書(shū)管理系統(tǒng)
- 學(xué)生信息管理系統(tǒng)C語(yǔ)言版
- C語(yǔ)言職工信息管理系統(tǒng)源碼
- C語(yǔ)言圖書(shū)管理系統(tǒng)簡(jiǎn)潔版
- C語(yǔ)言利用結(jié)構(gòu)體數(shù)組實(shí)現(xiàn)學(xué)生成績(jī)管理系統(tǒng)
- C語(yǔ)言學(xué)生管理系統(tǒng)源碼分享
- 學(xué)生成績(jī)管理系統(tǒng)C語(yǔ)言代碼實(shí)現(xiàn)
- C語(yǔ)言學(xué)生成績(jī)管理系統(tǒng)源代碼
相關(guān)文章
用C++實(shí)現(xiàn)strcpy(),返回一個(gè)char*類(lèi)型的深入分析
本篇文章是對(duì)用C++實(shí)現(xiàn)strcpy(),返回一個(gè)char*類(lèi)型進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C語(yǔ)言實(shí)現(xiàn)進(jìn)程間通信原理解析
這篇文章主要介紹了C語(yǔ)言實(shí)現(xiàn)進(jìn)程間通信原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的推箱子游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的推箱子游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01
C/C++ Qt 自定義Dialog對(duì)話框組件應(yīng)用案例詳解
有時(shí)候我們需要一次性修改多個(gè)數(shù)據(jù),使用默認(rèn)的模態(tài)對(duì)話框似乎不太夠用,此時(shí)我們需要自己創(chuàng)建一個(gè)自定義對(duì)話框。這篇文章主要介紹了Qt自定義Dialog對(duì)話框組件的應(yīng)用,感興趣的同學(xué)可以學(xué)習(xí)一下2021-11-11
C++?構(gòu)造函數(shù)學(xué)習(xí)筆記
這篇文章主要為大家介紹了C++?構(gòu)造函數(shù)學(xué)習(xí)筆記,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10
fatal error LNK1104: 無(wú)法打開(kāi)文件“l(fā)ibc.lib”的解決方法
本篇文章是對(duì)fatal error LNK1104: 無(wú)法打開(kāi)文件“l(fā)ibc.lib”的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
C++Node類(lèi)Cartographer開(kāi)始軌跡的處理深度詳解
這篇文章主要介紹了C++Node類(lèi)Cartographer開(kāi)始軌跡的處理,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2023-03-03

