qq_26812487 2015-03-23 15:21 采纳率: 100%
浏览 1800
已采纳

C语言初学者提问,不会修改程序

可以运行,但是达不到目的,不会修改

程序代码:

typedef struct /* 学生结构 /
{
short status; /
数据状态,0:正常 1:删除 /
char number[10]; /
学号 /
char name[20]; /
姓名 /
char sex[3]; /
性别 /
int age; /
年龄 /
char place; /
籍贯 /
char department; /
系别 /
char major; /
专业 /
int classnumber; /
班级 */
}StudentType;

void AddData(void); /* 增加数据 /
void ChangeData(void); /
修改数据 /
void SearchData(void); /
查找数据 /
void ListData(void); /
显示数据 /
void PackData(void); /
删除数据 */

#include /* 标准输入输出文件包含预处理命令 /
#include /
字符串文件含预处理命令 /
#include /
包含tolower()的原型 /
#include /
标准库文件包含预处理命令 */

FILE*fp; /* 声明文件指针 */

void AddData(void) /* 增加文件数据 /
{
StudentType student; /
学生 /
char tag; /
设置标志是否继续增加 /
student.status=0; /
数据状态,0:正常 1:删除 /
do
{
printf("学生学号:");
scanf("%s,student.number"); /
输入学号 /
printf("学生姓名:");
scanf("%s,student.name"); /
输入姓名 /
printf("学生性别:");
scanf("%s,student.sex"); /
输入性别 /
printf("学生年龄:");
scanf("%d,student.age"); /
输入年龄 /
printf("学生籍贯:");
scanf("%s,student.place"); /
输入籍贯 /
printf("学生系别");
scanf("%s,student.department"); /
输入系别 /
printf("学生专业:");
scanf("%s,student.major"); /
输入专业 /
printf("学生班级:");
scanf("%d,student.classnumber"); /
输入班级 */

fseek(fp,0, SEEK_END); /* 移动文件内部指针 /
fwrite(&student,sizeof(StudentType),1,fp); /
将图书信息存入文件中 /
printf("继续添加吗(y/n):");
while (getchar() !='\n'); /
跳过当前行 /
tag=getchar(); /
y,Y表示继续,N,n表示结束 /
tag=tolower(tag); /
大写字母转化为小写字母 /
while (tag !='y' && tag !='n')
{ /
非法输入时重新输入 /
printf("输入非法,重新输入(y/n):");
while (getchar() !='\n'); /
跳过当前行 /
tag=getchar(); /
y,Y表示继续,N,n表示结束 /
tag=tolower(tag); /
大写字母转化为小写字母 */
}

}while (tag=='y'); /* 肯定回答时循环 */
}

void ChangeData(void) /* 更新数据 /
{
StudentType student; /
学生 /
char number[20]; /
学生学号 /
printf("输入要更改的学生学号:");
scanf("%s",number); /
输入学生学号 /
rewind(fp); /
使位置指针返回到文件开头 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生信息 */
while(!feof(fp))

{      /* 文件未结束 */
   if(strcmp(student.number,number)==0   /* 学生学号相同 */
       && student.status==0               /* 数据状态正常,未作删除标志 */
       )break;                            /* 查询成功 */
   fread(&student,sizeof(StudentType),1,fp);   /* 读入学生信息 */
}
if (!feof(fp))
{  /* 查询成功 */

printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/* 输出信息 */
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);

printf("输入更改后的数据:\n");
printf("学生学号:");
scanf("%s,student.number"); /* 输入学号 /
printf("学生姓名:");
scanf("%s,student.name"); /
输入姓名 /
printf("学生性别:");
scanf("%s,student.sex"); /
输入性别 /
printf("学生年龄:");
scanf("%d,student.age"); /
输入年龄 /
printf("学生籍贯:");
scanf("%s,student.place"); /
输入籍贯 /
printf("学生系别");
scanf("%s,student.department"); /
输入系别 /
printf("学生专业:");
scanf("%s,student.major"); /
输入专业 /
printf("学生班级:");
scanf("%d,student.classnumber"); /
输入班级
fseek(fp,-sizeof(StudentType), SEEK_CUR); /* 移动文件内部指针 /
fwrite(&student, sizeof(StudentType),1,fp); /
写入数据 /
}
else
{ /
查询失败 /
printf("无此编号的学生!\n");
clearerr(fp); /
清除文件结束标志 */

}
}

void SearchData(void)
{
StudentType student; /* 查询数据 /
int select; /
工作变量 /
char number[20]; /
学号 /
char major[20]; /
专业 */

printf("请选择:\n");
printf("1.按学号查询 2.按专业查询\n");
scanf("%d",&select); /* 输入选择 /
while (select2)
{
printf("请输入1~2的数:"); /
输入提示 /
scanf("%d,&select"); /
输入选择 */
}

switch (select)
{
case 1: /* 按学生学号查询 /
printf("请输入要查询的学生学号:");
scanf("%s",number); /
输入学生的学号 /
rewind(fp); /
使指针位置返回到文件的开头 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生信息 /
while (!feof(fp))
{ /
文件未结束 /
if(strcmp(student.number,number)==0 /
学生学号相同 /
&& student.status==0 /
数据状态正常,没有删除标志 /
)break; /
查询成功 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生信息 /
}
break;
case 2:
printf("输入要查询的学生的专业:"); /
按专业查询 /
scanf("%s",major); /
输入学生专业 /
rewind(fp); /
使指针返回文件的开头 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生的信息 /
while(!feof(fp))
{ /
文件未结束 /
if (strcmp(student.major,major)==0 /
学生专业相同 /
&& student.status==0 /
数据状态正常,没有删除标志 /
) break; /
查询成功 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生信息 /
}
break;
}
if (!feof(fp))
{ /
查询成功 /
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/
输出信息 /
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);
}
else
{ /
查询失败 /
printf("无此专业的学生!\n");
clearerr(fp); /
清除文件结束标志 */
}
}

void DeleteData(void) /* 删除数据,只作删除标志 /
{
StudentType student; /
学生 /
char number[20]; /
学生学号 /
printf("输入要更新的学生的学号:");

scanf("%s", number); /
输入学生的学号 /
rewind(fp); /
使位置指针返回文件的开头 /
fread(&student, sizeof(StudentType),1,fp); /
读入学生的信息 /
while(!feof(fp))
{ /
文件未结束 /
if (strcmp(student.number, number)==0 /
学生的学号相同 /
&& student.status==0 /
数据状态正常,未作删除标志 /
)break; /
查询成功 /
fread(&student,sizeof(StudentType),1,fp); /
读入学生信息 /
}
if(!feof(fp))
{ /
查询成功 /
printf("被删除记录为:、n");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n","学生学号","学生姓名","学生性别","学生年龄","学生籍贯","学生系别","学生专业","学生班级");
printf("%-20s%-10s%-5s%-4d%-20s%-20s%-20s%-15d%\n",
/
输出信息 /
student.number,student.name,student.sex,student.age,student.place,student.department,student.major,student.classnumber);
student.status=1;
fseek(fp,-sizeof(StudentType), SEEK_CUR); /
移动文件内部指针 /
fwrite(&student, sizeof(StudentType),1,fp); /
写入数据 /
}
else
{ /
查询失败 /
printf("无此编号的学生!\n");
clearerr(fp); /
清除文件结束标志 */

}
}

void pack(void) /* 在物理上删除作有删除标记的记录 /
{
StudentType student; /
学生 /
FILE*fpTmp; /
临时文件指针 /
if ((fpTmp=fopen("book_tmp.dat","wb"))==NULL)

{ /
打开文件失败 /
printf("打开文件student_tmp.dat 失败!\n"); /
错误信息 /
system("PAUSE"); /
调用库函数system(),输出系统提示信息 /
exit(2); /
退出程序 */
}

rewind(fp);                                     /* 使位置指针返回文件开头 */
fread(&student,sizeof(StudentType),1,fp);            /* 读入学生信息 */
while (!feof(fp))
{        /* 文件未结束 */
    if(student.status==0)                         /*数据状态正常,未作删除标志 */
       fwrite(&student,sizeof(StudentType),1,fpTmp);   /* 写入数据 */
    fread(&student,sizeof(StudentType),1,fp);        /* 继续读入图书信息 */
}
fclose(fp);    fclose(fpTmp);                    /* 关闭文件 */
remove("student.dat");                          /* 删除文件 */
rename("&student_tmp.dat","student.dat");          /* 更改文件名 */

if ((fp=fopen("student.dat","rb+"))==NULL)
{      /* 打开 employee.dat失败 */
   printf("打开文件student.dat 失败!\n");           /* 错误信息 */
   system("PAUSE");                  /* 调用库函数system(),输出系统提示信息 */
   exit(3);                                       /* 退出程序 */
 }

}

#include /* 标准输入输出文件包含预处理命令 /
#include /
标准库文件包含预处理命令 */

FILE*fp; /* 定义文件指针 */

int main(void) /* 主函数main() /
{
int select; /
工作变量 */

if ((fp=fopen("student.dat","rb+"))==NULL)
{   /* student.dat 文件不存在 */
   if ((fp=fopen("student.dat","wb+"))==NULL)
   {   /* 打开文件失败 */
       printf("打开文件student.dat失败!\n");    /* 错误信息 */
       system("PAUSE");   /* 调用库函数system(),输出系统提示信息 */

       exit(1);            /* 退出程序 */
    }
}

do
{
printf("\n请选择:\n");
printf("1.增加数据 2.修改数据 3.查找数据 4.删除数据 5.重组数据 6.退出\n");
scanf("%d",&select); /* 输入选择 /
while (select6)
{
printf("请输入1~6的数:"); /
输入提示 /
scanf("%d",&select); /
输入选择 */
}

switch(select)
{
case 1:
AddData(); /* 增加数据 /
break;
case 2:
ChangeData(); /
修改数据 */
break;

case 3:
SearchData(); /* 查询数据 /
break;
case 4:
DeleteData(); /
删除数据,只作删除标志 /
break;
case 5:
pack(); /
物理上删除作有标记的记录 /
break;
}
}while (select!=6); /
选择6退出循环 */

fclose(fp); /* 关闭文件 */

system("PAUSE"); /* 调用库函数system(),输出系统提示信息 /
return 0; /
返回值0,返回操作系统 */
}

  • 写回答

3条回答

  • threenewbee 2015-03-23 15:30
    关注

    你的目的是什么,程序有什么问题都不说,毫无重点贴上一坨shit code,让人怎么帮你。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 如何在scanpy上做差异基因和通路富集?
  • ¥20 关于#硬件工程#的问题,请各位专家解答!
  • ¥15 关于#matlab#的问题:期望的系统闭环传递函数为G(s)=wn^2/s^2+2¢wn+wn^2阻尼系数¢=0.707,使系统具有较小的超调量
  • ¥15 FLUENT如何实现在堆积颗粒的上表面加载高斯热源
  • ¥30 截图中的mathematics程序转换成matlab
  • ¥15 动力学代码报错,维度不匹配
  • ¥15 Power query添加列问题
  • ¥50 Kubernetes&Fission&Eleasticsearch
  • ¥15 報錯:Person is not mapped,如何解決?
  • ¥15 c++头文件不能识别CDialog