学生信息管理系统

 

程序里记录数据的条数的变量始终不变,一直都是初始值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');

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值