本帖最后由 claws0n 于 2018-8-26 19:20 编辑 #include <stdio.h>
#include <stdlib.h>
void in();
void show();
int menu();
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf\n"
#define DATA stu[i].num,stu[i].name,stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum
//struct student stu[50];
struct student{
int num;
char name[15];
double elec;
double expe;
double requ;
double sum;
}stu[50];
int main()
{
system("color f0\n");
menu();
int n = 100;
while(n)
{
scanf("%d", &n);
switch(n)
{
case 1:
in();
break;
}
menu();
}
return 0;
}
/////////////////////////in
void in()
{
int i, m = 0; //m是记录的条数
char ch; // 修改
FILE * fp; //定义指针文件
if ( (fp = fopen("data.txt","a+")) == NULL ) //打开失败
{
printf("打开失败!\n");
return;
}
while(!(fp)) // 修改
{
if(fread(&stu[m], LEN, 1, fp) == 1) //读取文件数据,,返回值为读取的项的个数
m++; //统计当前记录条数
}
fclose(fp);
if(m==0)
{
printf("文件中没有任何记录!\n");
}
else
{
show(); //显示所有的信息
}
if((fp=fopen("data.txt","w+"))==NULL)
{
printf("文件不存在!\n");
return;
}
printf("输入学生信息(y/n):\n"); // 修改
scanf("%s", &ch); // 修改
while(ch == 'Y' || ch == 'y') // 修改
{
printf(("输入学号num:\n");
scanf("%d", &stu[m].num);
//此处进行判断
for(i = 0; i < m; i++)
{
if(stu[i].num == stu[m].num)
{
printf("学号已经存在!按任意键继续\n");
getchar();
fclose(fp);
return;
}
}
printf("name:");
scanf("%s", &stu[m].name);
printf("elective:");
scanf("%lf",&stu[m].elec);
printf("experiment:");
scanf("%lf",&stu[m].expe);
printf("required courese:");
scanf("%lf",&stu[m].requ);
stu[m].sum = stu[m].elec + stu[m].expe + stu[m].requ;
if (fwrite(&stu[m],LEN,1,fp) != 1)
{
printf("该文件不能被保存!\n");
getchar();
}
else
{
printf("%s被保存\n",stu[m].name);
m++;
}
printf("继续?y/n:\n");
scanf("%s", &ch); /// 修改
}
fclose(fp);
printf("OK\n");
}
///////////////////////////menu
int menu ()
{
system("cls");
printf("\t-------学生信息管理系统------\n");
printf("\t\t\t 1、录入学生信息\n");
printf("\t\t\t 2、查找学生信息\n");
printf("\t\t\t 3、删除学生信息\n");
printf("\t\t\t 4、修改学生信息\n");
printf("\t\t\t 5、插入学生信息\n");
printf("\t\t\t 6、排序\n");
printf("\t\t\t 7、统计学生总数\n");
printf("\t\t\t 8、显示所有学生信息\n");
printf("\t\t\t 0、退出系统\n");
printf("\t\t请选择(0-8):");
return 0;
}
////////////////////////////show
void show()
{
FILE *fp;
int i, m = 0;
fp = fopen("data.txt","rb"); //rb二进制读取
while(!fp) //修改
{
if(fread(&stu[m], LEN, 1, fp) == 1)
{
m++;
}
}
fclose(fp);
printf("number name elective experiment required sum\t\n");
for(i = 0; i < m; i++)
{
printf(FORMAT, DATA);
}
}
具体的功能还没有,但是至少没有报错了
结构还没有定义,也还没有实例化,当然报错~
getchar() 或 get() 不是 getch()
char ch 不是 char ch[2] // 应该说不需要
!fp 不是 !feof(fp)
scanf("%?", &?) //一些地方少了 & 符号
strcmp() 没有必要吧?单一字符,直接比较就好,要用的话要 #include <string>
请加入适当的空格
不好意思,乱码了,已修改~ |