?? informationmanagement.txt
字號:
#include<stdio.h> /*I/O函數*/
#include<stdlib.h> /*標準庫函數*/
#include<string.h> /*字符串函數*/
#include<ctype.h> /*字符操作函數*/
#include<conio.h> /*字符屏幕控制函數*/
#define M 50 /*定義常數表示記錄數*/
typedef struct /*定義數據結構*/
{
char no[10]; /*學號*/
char name[20]; /*姓名*/
char tele[10]; /*電話*/
}ADDRESS;
int enter(ADDRESS t[]); /*輸入記錄*/
void list(ADDRESS t[],int n);/*顯示記錄*/
void search(ADDRESS t[],int n); /*按姓名查找顯示記錄*/
int del(ADDRESS t[],int n); /*刪除記錄*/
int add(ADDRESS t[],int n); /*插入記錄*/
void save(ADDRESS t[],int n); /*記錄保存為文件*/
int load(ADDRESS t[]); /*從文件查找顯示記錄*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void copy(); /*文件復制*/
void print(ADDRESS temp); /*顯示單條記錄*/
int find(ADDRESS t[],int n,char *s); /*查找函數*/
int menu_select(); /*主菜單函數*/
main()
{
int i;
ADDRESS adr[M]; /*定義結構體數組*/
int length=0; /*保存記錄長度,并賦初值為零*/
clrscr(); /*清屏*/
for(;;) /*無限循環(huán)*/
{
switch(menu_select()) /*調用主菜單函數,返回值為整數,作開關語句的條件*/
{
case 0:length=enter(adr);break;/*輸入記錄*/
case 1:list(adr,length);break; /*顯示全部記錄*/
case 2:search(adr,length);break; /*查找記錄*/
case 3:length=del(adr,length);break;/*刪除記錄*/
case 4:length=add(adr,length);break; /*插入記錄*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr);break; /*讀文件*/
case 7:sort(adr,length);break; /*按姓名排序*/
case 8:copy();break; /*復制文件*/
case 9:exit(0); /*如果返回值為9,則程序結束*/
}
}
}
menu_select()
{
char s[80];
int c;
gotoxy(1,25); /*將光標定為在第25行第1列*/
printf("press any key inter menu.....\n");/*提示按任意鍵繼續(xù)*/
getch(); /*讀入任意字符*/
clrscr(); /*清屏*/
gotoxy(1,1);
printf("------------------MENU---------------------\n");
printf(" 0.Enter record \n");
printf(" 1.List the file \n");
printf(" 2.Search record on name \n");
printf(" 3.Delete a record \n");
printf(" 4.Add record \n");
printf(" 5.Save the file \n");
printf(" 6.Load the file \n");
printf(" 7.Sort to make new file \n");
printf(" 8.Copy the file to new file \n");
printf(" 9.Quit \n");
printf("-------------------------------------------");
do
{
printf("\n Enter you choice(0~9):");/*提示輸入選項*/
scanf("%s",&s); /*輸入選擇項*/
c=atoi(s); /*將字符串轉化為整形數*/
}
while(c<0||c>9);/*選擇項不在0~9之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
int enter(ADDRESS t[])
{
int i,n;
char *s;
clrscr(); /*清屏*/
printf("\nplease input num \n"); /*提示信息*/
scanf("%d",&n); /*輸入記錄數*/
printf("please input record \n");/*提示輸入記錄*/
printf(" no name tele \n");
printf("------------------------------------------------------\n");
for(i=0;i<n;i++)
{
scanf ("%s%s%s",t[i].no,t[i].name,t[i].tele);
printf("------------------------------------------------------\n");
}
return n;/*返回記錄條數*/
}
void list(ADDRESS t[],int n)
{
int i;
clrscr();
printf("\n\n********************ADDRESS*********************\n");
printf(" no name tele \n");
printf("----------------------------------------------------\n");
for(i=0;i<n;i++)
printf("%-10s%-20s%-10s\n",t[i].no,t[i].name,t[i].tele);
if((i+1)%10==0) /*判斷輸出是否達到10條記錄*/
{
printf("Press any dey continue....\n"); /*提示信息*/
getch(); /*按任意鍵繼續(xù)*/
}
printf("*********************add************************\n");
}
void search(ADDRESS t[],int n)
{
char s[20]; /*保存待查找的姓名字符串*/
int i; /*保存查找到結點的序號*/
clrscr(); /*清屏*/
printf("please search name");
scanf("%s",&s); /*輸入待查找姓名*/
i=find(t,n,s); /*調用 find 函數,得到一個整數*/
if(i>n-1) /*如果整數i值大于n-1,說明找到*/
printf("not found\n");
else
print(t[i]); /*找到,調用顯示函數顯示記錄*/
}
void print (ADDRESS temp)
{
clrscr();
printf("\n\n***************************************\n");
printf(" no name tele \n");
printf("----------------------------------------\n");
printf("%-10s%-20s%-10s\n",temp.no,temp.name,temp.tele);
printf("******************add*******************\n");
}
int find(ADDRESS t[],int n,char *s)
{
int i;
for(i=0;i<n;i++) /*從第一條記錄開始,直到最后一條*/
{
if (strcmp(s,t[i].name)==0) /*記錄中的姓名和待比較的姓名是否相等*/
return i; /*相等,則返回該記錄的下標號,程序提前結束*/
}
return i; /*返回i值*/
}
int del(ADDRESS t[],int n)
{
char s[20]; /*要刪除記錄的姓名*/
int ch=0;
int i,j;
printf("please deleted name\n"); /*提示信息*/
scanf("%s",&s); /*輸入姓名*/
i=find(t,n,s); /*調用find函數*/
if(i>n-1) /*如果i>n-1超過了數組的記錄信息*/
printf("no found not deleted\n"); /*顯示沒有要刪除的記錄*/
else
{
print(t[i]); /*調用輸出函數顯示該記錄信息*/
printf("Are you sure delete it(1/0)\n"); /*確認是否要刪除*/
scanf("%d",&ch); /*輸入一個整數0或1*/
if(ch==1) /*如果確認刪除整數為1*/
{
for(j=i+1;j<n;j++) /*刪除該記錄,實際后續(xù)記錄前移*/
{
strcpy(t[j-1].no,t[j].no);
strcpy(t[j-1].name,t[j].name);
strcpy(t[j-1].tele,t[j].tele);
}
n--; /*記錄數減1*/
}
}
return n; /*返回記錄數*/
}
int add(ADDRESS t[],int n)
{
ADDRESS temp; /*插入記錄信息*/
int i,j;
char s[20]; /*確定插入在哪個記錄之前*/
printf("please input record\n");
printf("**************************************************\n");
printf(" no name tele \n");
printf("--------------------------------------------------\n");
scanf("%s%s%s",temp.no,temp.name,temp.tele);
printf("--------------------------------------------------\n");
printf("please input locate name\n");
scanf("%s",&s); /*輸入插入位置的姓名*/
i=find(t,n,s); /*調用find函數,確定插入位置*/
for(j=n-1;j>=i;j--) /*從最后一個結點開始向后移動一條*/
{
strcpy(t[j+1].no,t[j].no);
strcpy(t[j+1].name,t[j].name);
strcpy(t[j+1].tele,t[j].tele);
}
strcpy(t[i].no,temp.no); /*將新插入記錄拷貝到第i個位置*/
strcpy(t[i].name,temp.name);
strcpy(t[i].tele,temp.tele);
n++; /*記錄數加1*/
return n; /*返回記錄數*/
}
void save (ADDRESS t[],int n)
{
int i;
FILE *fp;/*指向文件的指針*/
if((fp=fopen("hmf.txt","wb"))==NULL)
{
printf("can not open file\n");
exit (1);
}
printf("\nSaving file\n");
fprintf(fp,"%d",n); /*將記錄寫入文件*/
fprintf(fp,"\r\n"); /*將換行符號寫入文件*/
for(i=0;i<n;i++)
{
fprintf(fp,"%-10s%-20s%-10s",t[i].no,t[i].name,t[i].tele); /*格式寫入記錄*/
fprintf(fp,"\r\n");
} /*將換行符號寫入文件*/
fclose(fp); /*關閉文件*/
printf("****save success****");
}
int load(ADDRESS t[])
{
int i,n;
FILE *fp;
if((fp=fopen("hmf.txt","rb"))==NULL) /*打開文件*/
{
printf("can not open file\n");
exit(1);/*退出*/
}
fscanf(fp,"%d",&n);/*讀入記錄數*/
for(i=0;i<n;i++)
fscanf(fp,"%-10s%-20s%-10s",t[i].no,t[i].name,t[i].tele); /*按格式讀入記錄*/
fclose(fp); /*關閉文件*/
printf("You have success read data from file!!\n");
return n; /*返回記錄數*/
}
void sort(ADDRESS t[],int n)
{
int i,j,flag;
ADDRESS temp; /*臨時變量做交換數據用*/
for(i=0;i<n;i++)
{
flag=0; /*設標志,判斷是否發(fā)生過交換*/
for(j=0;j<n-1;j++)
if((strcmp(t[j].name,t[j+1].name))>0) /*比較大小*/
{
flag=1;
strcpy(temp.no,t[j].no); /*交換記錄*/
strcpy(temp.name,t[j].name);
strcpy(temp.tele,t[j].tele);
strcpy(t[j].no,t[j+1].no);
strcpy(t[j].name,t[j+1].name);
strcpy(t[j].tele,t[j+1].tele);
strcpy(t[j+1].no,temp.no);
strcpy(t[j+1].name,temp.name);
strcpy(t[j+1].tele,temp.tele);
}
if(flag==0)break; /*如果標志為0,說明沒有發(fā)生過交換,循環(huán)結束*/
}
printf("sort sucess!!!\n"); /*顯示排序成功*/
}
void copy()
{
char outfile[20]; /*目標文件名*/
int i,n;
ADDRESS temp[M]; /*定義臨時變量*/
FILE *sfp,*tfp; /*定義指向文件的指針*/
clrscr();
if((sfp=fopen("hmf.txt","rb"))==NULL) /*打開記錄文件*/
{
printf("can not open file\n"); /*顯示不能打開文件*/
exit (1);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n "); /*提示信息*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*打開目標文件*/
{
printf("can not open file\n"); /*顯示不能打開文件的信息*/
exit(1); /**/
}
fscanf(sfp,"%d",&n); /*讀出文件記錄*/
fprintf(tfp,"%d",n); /*寫入目標文件數*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
for(i=0;i<n;i++)
{
fscanf(sfp,"%10s%20s%10s",temp[i].no,temp[i].name,temp[i].tele); /*讀入記錄*/
fprintf(tfp,"%-10s%-20s%-10s",temp[i].no,temp[i].name,temp[i].tele); /*寫入記錄*/
fprintf(tfp,"\r\n"); /*寫入換行符*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success copy file!!!\n");/*顯示復制成功*/
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -