上一次作的 連我自己都看不懂
吸收消化了一下 又做了一次
果然快多了 而且也是用阿哲說的
一次輸入 一次輸出的方法
又比較單純 應該很容易看的懂
只要這篇看的懂 應該期末就沒有問題
又為方便閱讀 給個網址
http://homepage.ntu.edu.tw/~b91505032/program_14.txt
以下
===================================================================
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
struct score
{
int id;
char name[30];
char sexy[5];
char birthplace[30];
int age;
struct score *next;
};
struct score *start, *nowsc, *newsc;
FILE *file;
int total;
char idstr[5];
char agestr[5];
void readfile();
void writefile();
void cmd_1_list();
void cmd_2_add();
void cmd_3_del();
void cmd_4_search();
void cmd_5_modify();
void main()
{
char cmd;
readfile();
do
{
printf("\n"
"歡迎使用阿海的個人資料管理系統\n"
"本系統提供以下功能:\n"
"1.列出清單\n"
"2.新增資料\n"
"3.刪除資料\n"
"4.查詢資料\n"
"5.修改資料\n"
"請輸入 ... ");
cmd = getchar();
getchar();
switch (cmd)
{
case '1':
cmd_1_list();
break;
case '2':
cmd_2_add();
break;
case '3':
cmd_3_del();
break;
case '4':
cmd_4_search();
break;
case '5':
cmd_5_modify();
break;
}
printf("\n"
"是否繼續使用? 是(y) 否(n): ");
cmd=getchar();
getchar();
}while(cmd!='n');
printf("\n謝謝使用!!!\n");
writefile();
free(start);
}
void readfile()
{
file = fopen("data.txt","r");
do
{
newsc = (struct score *)malloc(sizeof(struct score));
if (start==0)
start = nowsc = newsc;
else
{
nowsc = start;
while(nowsc->next != (struct score *)NULL)
nowsc = nowsc->next;
nowsc->next = newsc;
nowsc = newsc;
}
fscanf(file,"%s%s%s%s%s",idstr,nowsc->name,nowsc->sexy, \
nowsc->birthplace,agestr);
total = nowsc->id = atoi(idstr);
nowsc->age = atoi(agestr);
nowsc->next = (struct score *)NULL;
}while(!feof(file));
fclose(file);
}
void writefile()
{
file = fopen("data.txt","w");
nowsc = start;
while(nowsc != (struct score *)NULL)
{
fprintf(file,"%d %s %s %s %d\n",nowsc->id,nowsc->name, \
nowsc->sexy,nowsc->birthplace,nowsc->age);
nowsc = nowsc->next;
}
fclose(file);
}
void cmd_1_list()
{
nowsc = start;
while(nowsc != (struct score *)NULL)
{
printf("%d\t%s\t%s\t%s\t%d\n",nowsc->id,nowsc->name \
,nowsc->sexy,nowsc->birthplace,nowsc->age);
nowsc = nowsc->next;
}
}
void cmd_2_add()
{
newsc = (struct score *)malloc(sizeof(struct score));
if(start==0)
start = nowsc = newsc;
else
{
nowsc = start;
while(nowsc->next != (struct score *)NULL)
nowsc = nowsc->next;
nowsc->next = newsc;
nowsc = newsc;
}
nowsc->id = ++total;
printf("請輸入姓名: "); gets(nowsc->name);
printf("請輸入性別: "); gets(nowsc->sexy);
printf("請輸入出生地: "); gets(nowsc->birthplace);
printf("請輸入年齡: "); gets(agestr);
nowsc->age = atoi(agestr);
nowsc->next = (struct score *)NULL;
}
void cmd_3_del()
{
int delid;
struct score *link;
cmd_1_list();
printf("要刪除第幾筆資料: ");
scanf("%d",&delid);
getchar();
if(delid==1)
start = start->next;
else
{
link = nowsc = start;
while(nowsc->next != (struct score *)NULL)
{
nowsc = nowsc->next;
link->next = (struct score *)NULL;
if(nowsc->id != delid)
{
link->next = nowsc;
link = nowsc;
}
}
}
nowsc = start;
while(nowsc != (struct score *)NULL)
{
if(nowsc->id>delid) nowsc->id--;
nowsc = nowsc->next;
}
total--;
}
void cmd_4_search()
{
int keyid;
char keyword[30];
char cmd;
printf("輸入 (1)標號(2)姓名 搜尋: ");
cmd=getchar();
getchar();
switch(cmd)
{
case '1':
printf("請輸入標號: "); scanf("%d",&keyid);
getchar();
nowsc = start;
while(nowsc != (struct score *)NULL)
{
if(nowsc->id == keyid)
printf("%d\t%s\t%s\t%s\t%d\n",nowsc->id, \
nowsc->name,nowsc->sexy,nowsc->birthplace,\
nowsc->age);
nowsc = nowsc->next;
}
break;
case '2':
printf("請輸入姓名: "); gets(keyword);
nowsc = start;
while(nowsc != (struct score *)NULL)
{
if(strcmp(nowsc->name,keyword)==0)
printf("%d\t%s\t%s\t%s\t%d\n",nowsc->id, \
nowsc->name,nowsc->sexy,nowsc->birthplace,\
nowsc->age);
nowsc = nowsc->next;
}
break;
}
}
void cmd_5_modify()
{
int modid;
cmd_1_list();
printf("修改第幾筆: "); scanf("%d",&modid);
getchar();
nowsc = start;
while(nowsc != (struct score *)NULL)
{
if(nowsc->id == modid)
break;
nowsc = nowsc->next;
}
printf("請重新輸入姓名(原值為[%s]): ",nowsc->name);
gets(nowsc->name);
printf("請重新輸入性別(原值為[%s]): ",nowsc->sexy);
gets(nowsc->sexy);
printf("請重新輸入出生地(原值為[%s]): ",nowsc->birthplace);
gets(nowsc->birthplace);
printf("請重新輸入年齡(原值為[%d]): ",nowsc->age);
gets(agestr);
nowsc->age = atoi(agestr);
}
--
※ 發信站: 批踢踢實業坊(ptt.csie.ntu.edu.tw)
◆ From: 140.112.240.76