educoder上的一个实训项目,本来思路并不难,奈何实现其对输出的数据检测要求十分严格(我在输出某行数据时因为某行数据间隔少了一个空格导致花费了数小时debug),以致做该题时体验并不好!
#include<stdio.h>
int count;
struct node{
int num,score;
char name[233];
}stu[233];
void load(){
int i;
FILE *file=fopen("step1/data.txt","r");
for(i=0;i<5;i++)
fscanf(file,"%d %s %d",&stu[i].num,&stu[i].name,&stu[i].score);
fclose(file);
count=5;
}
void show(){
int i=0;
printf("\n******目前已保存有%d个学生的信息如下:******\n",count);
printf("%10s %16s %12s\n","学号","姓名","成绩");
for(i=0;i<count;i++)
printf("%10d%20s%10d\n",stu[i].num,stu[i].name,stu[i].score);
}
void insert(){
int i,n;
printf("请输入您要添加的学生数:");
scanf("%d",&n);
if(n<=0 || n>10-count)
printf("人数不对\n");
else{
for(i=0;i<n;i++){
while(1){
printf("请输入第%d个学生的学号(以回车结束):",i+1);
scanf("%d",&stu[i+count].num);
int m=0;
while(m<count+i && stu[count+i].num!=stu[m].num)
m++;
if(m<count+i)
printf("学号已经存在,请重新输入\n");
else
break;
}
printf("请输入第%d个学生的姓名(以回车结束):",i+1);
scanf("%s",stu[i+count].name);
printf("请输入第%d个学生的成绩(以回车结束):",i+1);
scanf("%d",&stu[i+count].score);
}
count+=n;
show();
}
}
void find_num(int x){
int i,flag=0;
for(i=0;i<count;i++){
if(stu[i].num==x){
printf("%10s %16s %12s\n","学号","姓名","成绩");
printf("%10d%20s%10d\n",stu[i].num,stu[i].name,stu[i].score);
flag=1;
break;
}
}
if(!flag)
printf("没有该信息\n");
}
void edit(int x){
int i,index=0;
while(index<count && stu[index].num!=x)
index++;
if(index==count)
printf("没有该信息\n");
else{
while(1){
printf("请输入新的学号(以回车结束):");
scanf("%d",&stu[index].num);
i=0;
while(i<count && (i==index || stu[i].num!=stu[index].num))
i++;
if(i<count)
printf("学号已存在,请重新输入\n");
else
break;
}
printf("请输入新的姓名(以回车结束):");
scanf("%s",&stu[index].name);
printf("请输入新的分数(以回车结束):");
scanf("%d",&stu[index].score);
show();
}
}
void del(int x){
int index=0;
while(index<count && stu[index].num!=x)
index++;
if(index==count)
printf("没有该信息\n");
else{
index++;
while(index<count){
stu[index-1]=stu[index];
index++;
}
count--;
show();
}
}
int main(){
load();
int f=1;
while(f==1){
printf("****************\n");
printf("* 1. 增加 *\n");
printf("* 2. 查询 *\n");
printf("* 3. 修改 *\n");
printf("* 4. 删除 *\n");
printf("* 5. 输出 *\n");
printf("* 0. 退出 *\n");
printf("****************\n");
printf("请选择:\n");
int input,k;
scanf("%d",&input);
switch(input){
case 1:
insert();
break;
case 2:
printf("请输入要查询的学号:");
scanf("%d",&k);
find_num(k);
break;
case 3:
printf("请输入要修改的学号:");
scanf("%d",&k);
edit(k);
break;
case 4:
printf("请输入要删除的学号:");
scanf("%d",&k);
del(k);
break;
case 5:
show();
break;
case 0:
f=0;
}
}
printf("程序结束,欢迎下次再来\n");
return 0;
}