作者shmm (有要念书找找我)
看板ESOE-91
标题[心得] 计程总算是做出来了
时间Fri Jun 13 16:09:07 2003
上一次作的 连我自己都看不懂
吸收消化了一下 又做了一次
果然快多了 而且也是用阿哲说的
一次输入 一次输出的方法
又比较单纯 应该很容易看的懂
只要这篇看的懂 应该期末就没有问题
又为方便阅读 给个网址
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