#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include <conio.h>
#define N 100
struct subway//定義一個結構體
{
char num[N];
char line[N];//地鐵線路
char sstation[N];//起始站
char ostation[N];//終點站
char wstation[N];//途徑站數
char charge[N];//票價
}sub[N];//給結構體起別名sub;
int k=1,n,m;
char readfile();//檔案讀取
void save();//將資訊保存至檔案
void insert();//增加地鐵資訊
void Delete();//洗掉地鐵資訊
void Search();//查詢地鐵資訊
void Print();//瀏覽地鐵資訊
void Update();//更新地鐵資訊
void menu();//主選單呼叫其他函式
int main()
{
while(k)
menu();
system("pause");
return 0;
}
char readfile()
{
FILE *fp;//要讀取的檔案指標
int i=0;//陣列移動
if ((fp=fopen("subway.txt","r"))==NULL)//打開操作不成功
{
printf("Open file is error!");
system("pause");
exit(0);
}
//原txt檔案的資料之間是空格隔開的,fscanf用來格式化讀取檔案中的資料
while(fscanf(fp,"%s %s %s %s %s %s",sub.num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)==6)
{
i++;
}
fclose(fp);//關閉檔案
n=i;
printf("錄入完畢!\n");
}
void save()
{
int i;
FILE *fp;//要讀取的檔案指標
fp=fopen("subway.txt","w"); //打開檔案進行寫入操作
for(i=0;i<n;i++)
{
//原txt檔案的資料之間是空格隔開的,fprintf用來向檔案寫格式化資料
fprintf(fp,"%s %s %s %s %s %s\n",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation);
}
fclose(fp);//關閉檔案
}
void insert() /*插入函式*/
{
FILE *fp;//要讀取的檔案指標
int i=0;//陣列移動
if ((fp=fopen("subway.txt","r"))==NULL)//打開操作不成功
{
printf("Open file is error!");
system("pause");
exit(0);
}
//原txt檔案的資料之間是空格隔開的,fscanf用來格式化讀取檔案中的資料
while(fscanf(fp,"%s %s %s %s %s %s",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)!=EOF)
{
i++;
}
n=i;
int j,flag;
printf("請輸入待增加的地鐵線路數量:\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("請輸入第 %d 個地鐵的編號:\n",i+1);
scanf("%s",sub[i].num);
for(j=0;j<i;j++)
if(strcmp(sub[i].num,sub[j].num)==0)
{
printf("已有該地鐵編號,請檢查后重新錄入!\n");
flag=1;
break; /*如有重復立即退出該層回圈,提高判斷速度*/
}
}
printf("請輸入第 %d 個地鐵線路:\n",i+1);
scanf("%s",sub[i].line);
printf("請輸入第 %d 個地鐵的起始站:\n",i+1);
scanf("%s",sub[i].sstation);
printf("請輸入第 %d 個地鐵的終點站\n",i+1);
scanf("%s",sub[i].ostation);
printf("請輸入第 %d 個地鐵的票價:\n",i+1);
scanf("%s",sub[i].charge);
printf("請輸入第 %d 個地鐵的途經站數\n",i+1);
scanf("%s",sub[i].wstation);
if(flag==0)
{
i++;
}
}
while(i<n+m);
n+=m;
printf("錄入完畢!\n\n");
fclose(fp);//關閉檔案
system("pause");
save();//呼叫函式在增加資訊后進行保存
return ;
}
void Delete()
{
FILE *fp;//要讀取的檔案指標
int i=0;//陣列移動
if ((fp=fopen("subway.txt","r"))==NULL)//打開操作不成功
{
printf("Open file is error!");
system("pause");
exit(0);
}
//原txt檔案的資料之間是空格隔開的,fscanf用來格式化讀取檔案中的資料
while(fscanf(fp,"%s %s %s %s %s %s",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)!=EOF)
{
i++;
}
n=i;
int t,j,flag=0;
char s1[30];
printf("請輸入要洗掉的地鐵編號:\n");
scanf("%s",s1);
for(t=0;t<n;t++)
if(strcmp(sub[t].num,s1)==0)
{
flag=1;
for(j=t;j<n-1;j++)
sub[t]=sub[t+1];
}
if(flag==0)
printf("該編號不存在!\n");
if(flag==1)
{
printf("洗掉成功\n");
n--;
}
save();//呼叫函式洗掉資訊后進行保存
}
void Search()//查找
{
FILE *fp;//要讀取的檔案指標
int i=0;//陣列移動
if ((fp=fopen("subway.txt","r"))==NULL)//打開操作不成功
{
printf("Open file is error!");
system("pause");
exit(0);
}
//原txt檔案的資料之間是空格隔開的,fscanf用來格式化讀取檔案中的資料
while(fscanf(fp,"%s %s %s %s %s %s",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)!=EOF)
{
i++;
}
n=i;
int j,item,flag=0;
char s1[10];
printf("----------------------------------------------------------\n");
printf("------------------ 1.按線路查詢 --------------------\n");
printf("------------------ 2.按起始站查詢 --------------------\n");
printf("------------------ 3.按終點站查詢 --------------------\n");
printf("------------------ 4.退出本選單 --------------------\n");
printf("----------------------------------------------------------\n");
while(1)
{
printf("請選擇子選單編號:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("請輸入要查詢的地鐵線路:");//通過地鐵線路查找
scanf("%s",s1);
for(j=0;j<n;j++)
if(strcmp(sub[j].line,s1)==0)
{
flag=1;
printf("地鐵編號 地鐵線路 起始站 終點站 票價 途經站數\n");
printf("----------------------------------------------------------\n");
printf("%4s %10s %11s %11s %3s %10s\n",sub[j].num,sub[j].line,sub[j].sstation,sub[j].ostation,sub[j].charge,sub[j].wstation);
printf("查詢完畢!\n\n");
}
if(flag==0)
printf("查詢錯誤,無該資訊!\n"); break;
case 2:
printf("請輸入查詢的地鐵起始站:");//通過地鐵起始站查找
scanf("%s",s1);
for(j=0;j<n;j++)
if(strcmp(sub[j].sstation,s1)==0)
{
flag=1;
printf("地鐵編號 地鐵線路 起始站 終點站 票價 途經站數\n");
printf("----------------------------------------------------------\n");
printf("%4s %10s %11s %11s %3s %10s\n",sub[j].num,sub[j].line,sub[j].sstation,sub[j].ostation,sub[j].charge,sub[j].wstation);
printf("查詢完畢!\n\n");
}
if(flag==0)
printf("查詢錯誤,無該資訊!\n"); break;
case 3:
printf("請輸入查詢的地鐵終點站:");//通過地鐵終點站查找
scanf("%s",s1);
for(j=0;j<n;j++)
if(strcmp(sub[j].ostation,s1)==0)
{
flag=1;
printf("地鐵編號 地鐵線路 起始站 終點站 票價 途經站數\n");
printf("----------------------------------------------------------\n");
printf("%4s %10s %11s %11s %3s %10s\n",sub[j].num,sub[j].line,sub[j].sstation,sub[j].ostation,sub[j].charge,sub[j].wstation);
printf("查詢完畢!\n\n");
}
if(flag==0)
printf("查詢錯誤,無該資訊\n"); break;
case 4: return;
default:printf("請在1-4之間選擇\n");//提示用戶在有效范圍中選擇
}
}
}
void Print()//存盤資訊的瀏覽
{
int i;
printf("歡迎查詢地鐵線路!所有資訊為:\n");
printf("地鐵編號 地鐵線路 起始站 終點站 票價 途經站數\n");
printf("----------------------------------------------------------\n");
save();//呼叫函式
for(i=0;i<n;i++)
{
printf("%4s %10s %11s %11s %3s %10s\n",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation);
}
}
void Update()//資訊的更新
{ FILE *fp;//要讀取的檔案指標
int i=0;//陣列移動
if ((fp=fopen("subway.txt","r"))==NULL)//打開操作不成功
{
printf("Open file is error!");
system("pause");
exit(0);
}
//原txt檔案的資料之間是空格隔開的,fscanf用來格式化讀取檔案中的資料
while(fscanf(fp,"%s %s %s %s %s %s",sub[i].num,sub[i].line,sub[i].sstation,sub[i].ostation,sub[i].charge,sub[i].wstation)!=EOF)
{
i++;
}
n=i;
int j,item;
char s1[N],s2[N];
printf("請輸入要更新的地鐵編號:");
scanf("%s",s1);
for(j=0;j<n;j++)
if(strcmp(sub[j].num,s1)==0)
{
printf("----------------------------------------------------------\n");
printf("--------------- 1.修改地鐵線路 --------------------\n")
printf("--------------- 2.修改地鐵起始站 --------------------\n");
printf("--------------- 3.修改地鐵終點站 --------------------\n");
printf("--------------- 4.修改票價 --------------------\n");
printf("--------------- 5.修改地鐵途經站數--------------------\n");
printf("--------------- 6.退出本選單 --------------------\n");
printf("----------------------------------------------------------\n");
while(1)
{
printf("請選擇子選單編號:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("請輸入新的地鐵線路:\n");
scanf("%s",s2);
strcpy(sub[j].line,s2); break;
case 2:
printf("請輸入新的起始站:\n");
scanf("%s",s2);
strcpy(sub[j].sstation,s2); break;
case 3:
printf("請輸入新的終點站:\n");
scanf("%s",s2);
strcpy(sub[j].ostation,s2); break;
case 4:
uj5u.com熱心網友回復:
代碼比較長,先說一下什么問題吧uj5u.com熱心網友回復:
char readfile() 這部分有問題,麻煩幫忙看一下
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/185085.html
標籤:C語言
上一篇:關于String回圈問題
下一篇:小白求助
