我寫的
寫到後來都在亂寫
似乎有很多資源垃圾
看看巴
我寫了將近2hr
超姬芭的
===========================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct score { int id;
char name[20];
char sexy[5];
char birthplace[20];
int age; };
int count_data(FILE*);
struct score* savedata();
void my_print(struct score);
void my_write(struct score,FILE*);
void cmd_1_list(struct score*);
void cmd_2_add(FILE*);
void cmd_3_del(struct score*);
void cmd_4_search(struct score*);
void cmd_5_change(struct score*);
char table[]=" +-------+--------+-------+----------+-------+";
char title[]=" | 編 號 | 姓 名 | 性 別 | 出 生 地 | 年 齡 |";
int main()
{
struct score *sc;
FILE *file;
char cmd;
char start[]="歡迎使用阿海的個人資料管理系統\n"
"請選擇您要的功能或按[q]離開程式\n"
"1.列出\n"
"2.新增\n"
"3.刪除\n"
"4.查詢\n"
"5.修改\n";
char over[]="謝謝您的使用\n";
do{
sc=savedata();
puts(start);
printf("請輸入指令... ");
scanf("%c",&cmd);
switch(cmd)
{
case '1':
cmd_1_list(sc);
getchar();
break;
case '2':
cmd_2_add(file=fopen("data.txt","a"));
getchar();
break;
case '3':
cmd_3_del(sc);
getchar();
break;
case '4':
cmd_4_search(sc);
getchar();
break;
case '5':
cmd_5_change(sc);
getchar();
break;
}
}while(cmd!='q');
printf("掰掰 ^____^\n\n");
free(sc);
return 0;
}
// 數數看有幾筆資料 count_data()
int count_data(FILE* file)
{
int no_data;
char buffer[20];
file=fopen("data.txt","r");
for(no_data=0;;no_data++)
{
if((fscanf(file,"%s",buffer))==EOF)
{
no_data/=5;
break;
}
}
fclose(file);
return no_data;
}
// 將資料存入記憶體中 savedata()
struct score* savedata()
{
struct score *sc;
FILE *file;
int i,no_data;
no_data=count_data(file=fopen("data.txt","r"));
sc=(struct score*)calloc(no_data,sizeof(struct score));
file=fopen("data.txt","r");
for(i=0;i<no_data;i++)
fscanf(file,"%d %s %s %s %d",
&sc[i].id,sc[i].name,sc[i].sexy,sc[i].birthplace,&sc[i].age);
fclose(file);
return sc;
}
// 印出一筆資料 my_print()
void my_print(struct score sc)
{
printf(" | %5d | %-6s | %2s | %-8s | %2d |\n",
sc.id,sc.name,sc.sexy,sc.birthplace,sc.age);
}
// 寫上一筆資料 my_write()
void my_write(struct score sc,FILE* file)
{
fprintf(file,"%d\t%s\t%s\t%s\t%d\n",
sc.id,sc.name,sc.sexy,sc.birthplace,sc.age);
}
// 功能一:列出全部資料 cmd_1_list()
void cmd_1_list(struct score *sc)
{
FILE *file;
int i,no_data;
file=fopen("data.txt","r");
no_data=count_data(file);
puts(table);
puts(title);
puts(table);
for(i=0;i<no_data;i++)
my_print(sc[i]);
puts(table);
}
// 功能二:增加一筆資料 cmd_2_add()
void cmd_2_add(FILE *file)
{
struct score add_sc;
int no_data;
no_data=count_data(file);
add_sc.id=++no_data;
printf("請輸入姓名: ");
scanf("%s",add_sc.name);
printf("請輸入性別: ");
scanf("%s",add_sc.sexy);
printf("請輸入出生地: ");
scanf("%s",add_sc.birthplace);
printf("請輸入年齡: ");
scanf("%d",&add_sc.age);
my_write(add_sc,file);
printf("增加完成...\n\n");
fclose(file);
}
// 功能三:刪除一筆資料 cmd_3_del()
void cmd_3_del(struct score *sc)
{
FILE *file;
int del,i,no_data;
file=fopen("data.txt","r");
no_data=count_data(file);
file=fopen("data.txt","w");
printf("請問您要刪除第幾筆資料: ");
scanf("%d",&del);
for(i=1;i<=no_data;i++)
{
if(i==del) continue;
if(i>del) --sc[i-1].id;
my_write(sc[i-1],file);
}
printf("刪除完成...\n\n");
fclose(file);
}
// 功能四:查詢 cmd_4_search()
void cmd_4_search(struct score* sc)
{
FILE *file;
int cmd,i,no_data,key_id,check=0;
char key_word[20];
no_data=count_data(file=fopen("data.txt","r"));
printf("1.輸入編號搜尋\n"
"2.輸入姓名搜尋\n"
"請輸入您的選項: ");
scanf("%d",&cmd);
switch(cmd)
{
case 1:
printf("請輸入您要搜尋的編號: ");
scanf("%d",&key_id);
for(i=0;i<no_data;i++)
{
if(sc[i].id==key_id)
{
check=1;
puts(table);
puts(title);
puts(table);
my_print(sc[i]);
puts(table);
break;
}
}
break;
case 2:
printf("請輸入您要搜尋的姓名: ");
scanf("%s",key_word);
for(i=0;i<no_data;i++)
{
if(strcmp(sc[i].name,key_word)==0)
{
check=1;
puts(table);
puts(title);
puts(table);
my_print(sc[i]);
puts(table);
break;
}
}
break;
}
if(check==0)
printf("查無此人...\n");
printf("搜尋完成...\n\n");
}
// 功能五:修改
void cmd_5_change(struct score *sc)
{
FILE *file;
int change_id,i,cmd,no_data;
cmd_1_list(sc);
no_data=count_data(file=fopen("data.txt","r"));
printf("請輸入編號: ");
scanf("%d",&change_id);
i=change_id-1;
printf("請輸入您要修改的項目\n"
"1.姓名\n"
"2.性別\n"
"3.出生地\n"
"4.年齡\n"
"請輸入... ");
scanf("%d",&cmd);
printf("您要將其修改成: ");
switch(cmd){
case 1:
scanf("%s",sc[i].name);
break;
case 2:
scanf("%s",sc[i].sexy);
break;
case 3:
scanf("%s",sc[i].birthplace);
break;
case 4:
scanf("%d",&sc[i].age);
break;
}
file=fopen("data.txt","w");
for(i=0;i<no_data;i++)
my_write(sc[i],file);
printf("修改完成...\n\n");
fclose(file);
}
==========================================================================
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 140.112.240.76
※ 編輯: shmm 來自: 140.112.240.76 (06/11 17:22)