程序里记录数据的条数的变量始终不变,一直都是初始值0,count++没起到作用,因为表示条数的变量始终是0,导致输出函数在输出数据时一条都不输出。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include <conio.h>
#define ESC 0x1b; //ESC的ASCII码是0x1b。
#define N 100
char choice='y';
int count=0;
int i=0;
struct student
{
int ID;
char name[20];
double score1;
double score2;
double score3;
double average;
}stud[N+1],s[N];
void printstar()
{
for(i=0;i<80;i++)
{
printf("*");
}
printf("/n");
}
void time()
{
for(i=0;i<3.3e08;i++);
}
void login()//用户登陆
{
char name[15],pwd[15],c;
printf("/n/n/t/t/t/t用户登陆/n/n");
printf("/t/t用户名:");
gets(name);
printf("/n/t/t密码:");
c = getch();
while(c != '/r')
{
if(i >= 0)
{
if (c == '/b')
{
printf("/b /b");
i = i - 1;
}
else
{
printf("*");
pwd[i] = c;
}
}
c = getch();
if(c != '/b')
i = i + 1;
}
pwd[i] = '/0';
if((strcmp(name,"little boy")==0)&&(strcmp(pwd,"123456")==0))
printf("/n/n登陆成功!/n");
else
printf("/n/n登陆失败!/n");
}
void input() //录入数据
{
FILE * fp;
if((fp=fopen("stu.dat","rb"))==NULL)
{
fp=fopen("stu.dat","w");
}
else
{
fp=fopen("stu.dat","ab");
}
system("cls");
do
{
printf("/n/t/t/t/t学生信息录入/n");
printstar();
printf("/n学号:");
scanf("%d",&stud[i].ID);
printf("/n姓名:");
scanf("%s",stud[i].name);
printf("/n三门课成绩分别为:");
scanf("%lf %lf %lf",&stud[i].score1,&stud[i].score2,&stud[i].score3);
stud[i].average=(stud[i].score1+stud[i].score2+stud[i].score3)/3;
printf("/n平均成绩为:%3.1lf/n",stud[i].average);
fwrite(&stud[i],sizeof(struct student),1,fp);
count++;
fflush(stdin);
printf("是否继续录入(y/n)?");
scanf("%c",&choice);
system("cls");
if(choice!='y'&&choice!='n')
{
printstar();
printf("/n/t您输入了非法字符,请重新输入!/n/n");
printstar();
time();
}
printf("/n");
}while(choice=='y');
fclose(fp);
}
void browse() //浏览
{
system("cls");
FILE * fp;
fp=fopen("stu.dat","rb");
printf("/n/t/t/t/t学生信息浏览/n/n");
printstar();
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
}
void byID() //按学号查询
{
int ch_ID;
FILE * fp;
fp=fopen("stu.dat","rb");
system("cls");
printf("/n/n/t/t输入学号:");
scanf("%d",&ch_ID);
if(ch_ID==stud[i].ID)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void byname() //按姓名查询。
{
char ch_name[20];
FILE * fp;
fp=fopen("stu.dat","rb");
system("cls");
printf("输入姓名:");
scanf("%d",ch_name);
if(strcmp(ch_name,stud[i].name)==0)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void query() //查询函数
{
int choose;
system("cls");
do
{
//system("cls");
printf("/n/t/t/t/t学生信息查询/n/n");
printstar();
printf("________________________________________________________________________________/n");
printf("/t/t/t/t1.〖按学号查询〗/n/n");
printf("/t/t/t/t2.〖按姓名查询〗/n/n");
printf("/t/t/t/t3. 〖返回〗/n");
printf("________________________________________________________________________________/n");
printf("/t/t请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
byID();
break;
case 2:
byname();
break;
case 3:
return;
}
if(choose!=1 && choose!=2 && choose!=3)
printf("选择错误!");
}while(choose!=1 && choose!=2);
}
void update() //修改学生信息
{
FILE * fp;
fp=fopen("stu.dat","rb+");
system("cls");
printf("/n/t/t/t/t学生信息修改/n/n");
printstar();
printf("/t/n输入要修改信息的学生学号:");
scanf("%d",&stud[i].ID);
fread(&stud[i],sizeof(struct student),1,fp);
printf("/n修改前的数据:/n");
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
fclose(fp);
}
void del() //信息删除函数
{
FILE * fp;
int del_ID;
char choose='Y';
fp=fopen("stu.dat","rb");
system("cls");
printf("/n/t/t/t/t学生信息删除/n/n");
if(count==0)
{
printstar();
printf("/n/n/t/t/t您的学生数据库中无任何记录!/n/n/n");
printstar();
return;
}
do
{
printf("/t/n输入要删除信息的学生学号:");
scanf("%d",&del_ID);
if(del_ID==stud[i].ID)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
printf("/n/n您确定要删除%d号学员的信息吗(Y/N):");
scanf("%c",&choose);
if(choose=='Y')
{
for(i=0;i<count-1;i++)
{
stud[i]=stud[i+1];
count--;
}
printf("/n删除后的全体学员信息:/n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
printf("/n/n/t/t/t按ESC返回/n/n");
}
}
else
return;
}
else
printf("/n/n对不起,不存在%d号学员的信息.");
}while(choice=='y');
fclose(fp);
}
void sort_ID() //按学号排序
{
FILE * fp;
int j=0,temp=0;
fp=fopen("stu.dat","rb");
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stud[j].ID>stud[j+1].ID)
{
temp=stud[j].ID;
stud[j].ID=stud[j+1].ID;
stud[j+1].ID=temp;
}
}
}
system("cls");
printf("/n/t/t/t/t按学号排序后的列表/n/n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void sort_ave() //按平均分排序
{
FILE * fp;
int j=0;
double temp=0;
fp=fopen("stu.dat","rb");
for(i=0;i<count;i++)
{
for(j=0;j<count-i-1;j++)
{
if(stud[j].average>stud[j+1].average)
{
temp=stud[j].average;
stud[j].average=stud[j+1].average;
stud[j+1].average=temp;
}
}
}
system("cls");
printf("/n/t/t/t/t按平均分排序后的列表/n/n");
for(i=0;i<count;i++)
{
fread(&stud[i],sizeof(struct student),1,fp);
printf("/t学号 姓名 成绩1 成绩2 成绩3 平均成绩/n");
printf("/t%d %s %4.1lf %4.1lf %4.1lf %4.1lf/n",stud[i].ID,stud[i].name,stud[i].score1,stud[i].score2,stud[i].score3,stud[i].average);
}
fclose(fp);
}
void sort() //排序函数
{
int choose;
system("cls");
do
{
system("cls");
printf("/n/n/n/t/t/t/t学生信息排序/n/n");
printstar();
printf("/t/t/t/t1.〖按平均分排序〗/n/n");
printf("/t/t/t/t2. 〖按学号排序〗/n/n");
printf("/t/t/t/t3. 〖返回〗/n/n");
printstar();
printf("/t/t/t请选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
sort_ave();
break;
case 2:
sort_ID();
break;
case 3:
return;
}
}while(choose!=1&&choose!=2&&choose!=3);
}
void logout() //退出程序
{
system("cls");
printf("/n/n/n/t/t/t 您将退出学生信息管理系统!/n/n");
printstar();
printf("/n/n/t/t感谢您使用本管理系统,如有任何问题请与开发者联系/n/n");
printf("/t/t开发者:高志林/t/tE-mail:gaozhi0@163.com/n/n/n/n/n");
printstar();
}
void main()
{
char choice='1';
//login();
system("cls");
do
{
system("cls");
printstar();
printf("/n/t/t/t欢迎使用学生信息管理系统!/n/n");
printstar();
printf("/n/t/t/t/t1.【信息录入】/n");
printf("/n/t/t/t/t2.【信息浏览】/n");
printf("/n/t/t/t/t3.【信息查询】/n");
printf("/n/t/t/t/t4.【信息修改】/n");
printf("/n/t/t/t/t5.【信息删除】/n");
printf("/n/t/t/t/t6.【信息排序】/n");
printf("/n/t/t/t/t7. 【退出】/n");
printf("/n/t/t/t请选择:");
scanf("%c",&choice);
switch(choice)
{
case '1':
input();
break;
case '2':
browse();
break;
case '3':
query();
break;
case '4':
update();
break;
case '5':
del();
break;
case '6':
sort();
break;
case '7':
logout();
break;
default:
printf("输入错误");
}
}while(choice!='1'&&choice!='2'&&choice!='3'&&choice!='4'&&choice!='5'&&choice!='6'&&choice!='7');
}