fp指针为空 返回直一直是0
放出部分代码 进去后直接选1 enter就ok
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include<string.h>
#include<stdlib.h>
int i,n, num = 0;
void query();//查询函数//
void xiugai();//修改函数//
void output();//输出函数//
void input();//输入函数//
void count();//读取文件//
void tuichu();//退出函数//
void deletee();//删除函数//
void ave();//求全班平均值函数//
//学生结构体//
struct student
{
char name[32]; //姓名
int number[3]; //学号
float chinese; //语文成绩
float math; //数学成绩
float english; // 英语成绩
float sum;
}stu[1];
void count()
{
FILE* fp; //定义文件指针fp//
fp = fopen_s(&fp,"stu.dat", "wb");
if (fp == NULL) //判断文件是否为空//
{
printf("Cannot open file!");
exit(0);
}
fclose(fp); //关闭文件//
}
void main() // 菜单 //
{
int i;
system("cls");
printf("\t\t 欢迎进入学生信息管理系统\n");
printf("\t\t================================\n");
printf("\t\t***** 请选择操作序号: *****\n");
printf("\t\t* 1.输入学生信息 *\n");
printf("\t\t* 2.输出学生信息 *\n");
printf("\t\t* 3.修改学生信息 *\n");
printf("\t\t* 4.查询学生信息 *\n");
printf("\t\t* 5.删除学生信息 *\n");
printf("\t\t* 6.查看班级平均分 *\n");
printf("\t\t* 0.退出 *\n");
printf("\t\t================================\n");
scanf_s("%d", &i);
system("cls");
switch (i)
{
case 0:tuichu(); break; //退出系统//
case 1:input(); break; //输入学生信息//
case 2:output(); break; //输出学生信息//
case 3:xiugai(); output(); break; //修改学生信息//
case 4:query(); break; //查询学生信息//
case 5:deletee(); break;//删除学生信息//
case 6:ave(); break;//班级平均分//
default:
printf("输入错误\n"); //错误纠正//
}
}
void input() //成绩输入//
{
int i,j;
const int sum;
char ch;
FILE *fp;
printf("请输入学生的人数:\n");
scanf_s("%d", &sum);
fp = fopen_s(&fp, "stu.dat", "wt");
for (i = 0; i < sum; i++)
{
printf("输入学生学号\n");
scanf_s("%d", &stu[i].number);
printf("输入学生姓名\n");
scanf_s("%s", stu[i].name, sizeof(stu[i].name));
printf("输入学生语文成绩\n");
scanf_s("%f", &stu[i].chinese);
printf("输入学生数学成绩\n");
scanf_s("%f", &stu[i].math);
printf("输入学生英语成绩\n");
scanf_s("%f", &stu[i].english);
printf("\t是否继续输入?\n");
printf("\tY or N\n");
do
{
ch = getchar();
if (ch == 'Y' || ch=='y')
break;
else
if (ch == 'N' || ch=='n')
main();
else continue;
} while (1);
system("cls");
}
if (fp == NULL)
return 0;
for (j = 0; j < i; j++)
fwrite(&stu[j], sizeof(struct student), 1, fp);
fclose(fp);
printf("录入成绩成功!\n");
system("cls");
main();
}
fp = fopen_s(&fp,"stu.dat", "wb");
改成
fopen_s(&fp,"stu.dat", "wb");
就行了,不要返回值啊
自己写过一个学生管理系统(C语言)
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
typedef struct node
{
int chinese;
int math;
int english;
int num;
char name[10];
struct node *prev;
struct node *next;
}node;
node *initlist(void)
{
node *new=malloc(sizeof(node));
if(new == NULL)
{
printf("malloc fail\n");
return NULL;
}
new->chinese=0;
int math=0;
int english=0;
new->num=0;
new->name[10];
new->next=new;
new->prev=new;
return new;
}
//从尾插入数据
void initlisthead1(node *head,node *new)
{
new->prev=head->prev;
new->next=head;
head->prev->next=new;
head->prev=new;
}
//查询学生的信息
node *find_data(node *head,int data)
{
node *p=NULL;
for(p=head->next;p!=head;p=p->next)
{
if(p->num == data)
{
return p;
}
}
return NULL;
}
//删除学生信息
node *del_data(node *head,int data)
{
node *del;
node *p;
del=find_data(head,data);
if(del == NULL)
{
return NULL;
}
del->prev->next=del->next;
del->next->prev=del->prev;
del->next=del;
del->prev=del;
return del;
}
//解除节点
void remo(node *head,node *q)
{
node*p=NULL;
for(p=head;p->next!=q;p=p->next);
p->next=q->next;
q->next=NULL;
}
//总分排序
void sort(node *head)
{
node *p=NULL;
node *tmp=NULL;
int len=0;
for(p=head->next;p!=head;p=p->next)
{
len++;
}
for(int i=0;i<len-1;i++)
{
p=head->next;
for(int j=0;j<len-1-i;j++)
{
tmp=p->next;
if(p->chinese+p->math+p->english > tmp->chinese+tmp->math+tmp->english)
{
remo(head,p);
p->next=tmp->next;
tmp->next=p;
}
else
{
p=p->next;
}
}
}
}
//显示数据
void display(node *head)
{
node *p;
printf("名字:");
for(p=head->next;p!=head;p=p->next)
{
printf(" \t%s",p->name);
}
printf("\n");
printf("学号:");
for(p=head->next;p!=head;p=p->next)
{
printf(" \t%d",p->num);
}
printf("\n");
printf("语文成绩:");
for(p=head->next;p!=head;p=p->next)
{
printf("\t%d",p->chinese);
}
printf("\n");
printf("数学成绩:");
for(p=head->next;p!=head;p=p->next)
{
printf("\t%d",p->math);
}
printf("\n");
printf("英语成绩:");
for(p=head->next;p!=head;p=p->next)
{
printf("\t%d",p->english);
}
printf("\n");
printf("总分成绩:");
for(p=head->next;p!=head;p=p->next)
{
printf("\t%d",p->chinese+p->math+p->english);
}
printf("\n");
}
//销毁链表
void destroy(node *head)
{
node *p=NULL,*tmp=NULL;
for(p=head->next;p!=head;p=tmp)
{
tmp=p->next;
free(p);
}
head->next=head;
head->prev=head;
}
int main()
{
node *head,*new,*find,*del;
char ch,sh;
int data,i=1,code,data1;
head=initlist();
while(1)
{
printf(" 学生系统的操作功能:\n");
printf("\t\t\tb:生成学生成绩数据:\n");
printf("\t\t\tc:查找学生:\n");
printf("\t\t\td:删除学生的信息:\n");
printf("\t\t\tq:按总分排序:\n");
printf("\t\t\tp:显示学生的信息:\n");
printf("\t\t\ts:修改学生的信息:\n");
printf("\t\t\tt:销毁信息:\n");
ch=getchar();
switch (ch)
{
case 'b':
srand((int)time(0));
new=initlist();
scanf("%s",new->name);
new->chinese=rand()%100+1;
new->math=rand()%100+1;
new->english=rand()%100+1;
new->num=i++;
initlisthead1(head,new);
break;
case 'c':
printf("输入学号:");
scanf("%d",&data);
find=find_data(head,data);
if(find!=NULL)
{
printf("查询到该学生\n");
printf("名字:");
printf(" \t%s",find->name);
printf("\n");
printf("学号:");
printf(" \t%d",find->num);
printf("\n");
printf("语文成绩:");
printf("\t%d",find->chinese);
printf("\n");
printf("数学成绩:");
printf("\t%d",find->math);
printf("\n");
printf("英语成绩:");
printf("\t%d",find->english);
printf("\n");
printf("总分成绩:");
printf("\t%d",find->chinese+find->math+find->english);
printf("\n");
}
else
{
printf("查无此人,请重新输入\n");
}
break;
case 'd':
printf("输入学号\n");
scanf("%d",&data);
del=del_data(head,data);
if(del == NULL)
{
printf("查无此人,请重新输入\n");
}
else
{
printf("删除成功\n");
}
break;
case 'q':
sort(head);
break;
case 'p':display(head);
break;
case 's':
printf("权限不够,输入密码验证\n");
scanf("%d",&code);
if(code == 123456)
{
printf("成功进入内部系统\n");
printf("输入学号\n");
scanf("%d",&data);
find=find_data(head,data);
if(find!=NULL)
{
printf("查询到该学生\n");
printf("名字:");
printf(" \t%s",find->name);
printf("\n");
printf("学号:");
printf(" \t%d",find->num);
printf("\n");
printf("语文成绩:");
printf("\t%d",find->chinese);
printf("\n");
printf("数学成绩:");
printf("\t%d",find->math);
printf("\n");
printf("英语成绩:");
printf("\t%d",find->english);
printf("\n");
printf("总分成绩:");
printf("\t%d",find->chinese+find->math+find->english);
printf("\n");
printf("你需要修改什么:\n");
printf(" a.名字\n");
printf(" b.语文成绩\n");
printf(" c.数学成绩\n");
printf(" d.英语成绩\n");
while(getchar()!='\n');
sh=getchar();
switch(sh)
{
case 'a':printf("修改后的名字:\n");
scanf("%s",find->name);
break;
case 'b':printf("修改后的语文成绩:\n");
scanf("%d",&find->chinese);
break;
case 'c':printf("修改后的数学成绩:\n");
scanf("%d",&find->math);
break;
case 'd':printf("修改后的英语成绩:\n");
scanf("%d",&find->english);
break;
default:
break;
}
}
else
{
printf("查无此人,请重新输入\n");
}
}
else
{
printf("密码错误无法访问\n");
break;
}
break;
case 't':destroy(head);
break;
default:
break;
}
while(getchar()!='\n');
}
}