学生信息管理系统设计

学生信息管理系统设计
学生信息包括:学号,姓名,年龄,性别,出生年月,地址,电话,E-mail等。
试设计一学生信息管理系统,使之能提供以下功能:
系统以菜单方式工作
学生信息录入功能(学生信息用文件保存)—输入
学生信息浏览功能—输出
查询、排序功能—算法
按学号查询
按姓名查询学生信息的删除与修改

C语言课程设计的作业,懵懵懂懂的做了一个,很多代码其实都是一样的,上下可以互相贴
#include<stdio.h>//标准的输入输出函数头文件
#include<string.h>//字符串类头文件
#include<math.h>//数学函数头文件
#include<stdlib.h>
char f; 
FILE *fp;//文件指针
#define M 80
struct student //结构体定义声明
{
 char num[13];//学号
 char name[15];//姓名
 int age;//年龄
 char x[5];//性别
 char year_month_day[15];//出生年月
 char address[15];//地址
 int iphone;//手机号
 char e_mail[20];//邮箱
 int xx,yy,wl,cyy,pe;//数学、英语、物理、C语言、体育
};
void input(struct student stu[M]);//输入函数
void output(struct student stu[M]);//输出函数
void lookfor(struct student stu[M]);//查询函数
void order(struct student stu[M]);//排序函数
void delete_s(struct student stu[M]);//删除函数
void modify(struct student stu[M]);//修改函数
void xuehao(struct student stu[M]);//学号查询函数     
void xingming(struct student stu[M]);//姓名查询函数
void fileread(struct student stu[M]);//读取文件信息函数
void filewrite(struct student stu[M]);//写入文件函数
int count;//定义一个全局变量
struct student t;
int main()
{
 int choice,sum;
 struct student stu[M];
 sum=0;
 do 
 { 
  printf("\t-------------------------------------------------\n"); 
  printf("\t+  学生信息管理系统        +\n"); 
  printf("\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 7、读取文件学生\n");//从文件读取 
  printf("\t\t 8、保存到文件\n");//保存到文件 
  printf("\t\t 9、退出系统\n");    
  printf("\t\t ***************\n");  
  printf("请输入你的选择\n"); 
  scanf("%d",&choice); 
  fflush(stdin);       //清除输入缓冲区,类似getchar()接受一个无关字符
  if (choice>9||choice<=0) 
  { 
   sum++; 
   if (sum>=5) 
   { 
    printf("输入错误次数过多,程序将重新开始\n"); 
    system("pause");        //程序暂停提示 
    system("cls");   //清屏语句  
   } 
  } 
  switch (choice)       //根据选择,调用不同的函数来完成不同的任务 
  { 
  case 1:input(stu);break;        
  case 2:output(stu);break;
  case 3:lookfor(stu);break; 
  case 4:modify(stu);break; 
  case 5:delete_s(stu);break; 
  case 6:order(stu);break; 
  case 7:fileread(stu);break; 
  case 8:filewrite(stu);;break; 
  case 9:printf("感谢你使用学生信息管理系统,请关掉程序!\n");system("pause");break; 
  default:printf("无效的选择!请重新输入!\n");break; 
  } 
 }
 while(choice!=9); 
 printf("the program is over!\n");  
 return 0;
}
void input(struct student stu[M])//自定义输入函数
{
 system("cls");
 printf("请添加要输入学生的信息\n");
 printf("请输入由12位数字组成的学生的学号\n");
 scanf("%s",stu[count].num);
 printf("请输入学生的姓名\n");
 scanf("%s",stu[count].name);
 printf("请输入学生的年龄\n");
 scanf("%d",&stu[count].age);
 printf("请输入学生的性别\n");
 scanf("%s",stu[count].x);
 printf("请输入学生的出生年月\n");
 scanf("%s",stu[count].year_month_day);
    printf("请输入学生的地址\n");
 scanf("%s",stu[count].address); 
 printf("请输入学生的电话\n");
 scanf("%d",&stu[count].iphone); 
 printf("请输入学生的E-mail\n");
 scanf("%s",stu[count].e_mail);
 printf("请依次输入五项不大于100的学生各科成绩\n");
 scanf("%d%d%d%d%d",&stu[count].xx,&stu[count].yy,&stu[count].wl,&stu[count].cyy,&stu[count].pe);
    count++;
}
void output(struct student stu[M])//自定义输出函数
{
 int j;
 system("cls");
 if(count==0)
 {
  printf("当前已存入学生的信息为0个\n");
  return;
 }
 else
 {
  for(j=0;j<count;j++)
  {
         printf("学号:%s\t",stu[j].num);
         printf("姓名:%s\t",stu[j].name);
         printf("年龄:%d\t",stu[j].age);
            printf("性别:%s\t",stu[j].x);
         printf("出生年月:%s\t",stu[j].year_month_day);
           printf("地址:%s\t",stu[j].address);
         printf("电话:%d\t",stu[j].iphone);
         printf("E-mail:%s\t",stu[j].e_mail);
         printf("数学:%d\t英语:%d\t物理:%d\tC语言:%d\t体育:%d\n",stu[j].xx,stu[j].yy,stu[j].wl,stu[j].cyy,stu[j].pe);
  }
 }
}
void lookfor(struct student stu[M])//自定义查询函数
{
 int choice;
 system("cls");
 if(count==0)
 {
  printf("当前已存学生的信息为0个,无法查询!!!\n");
  return;
 }
 else
 {
  printf("请选择你所要查询的方式: 1、学号 2、姓名 3、取消\n");
  scanf("%d",&choice);
  switch(choice)//switch语句对用户要查询的方式进行选择 
  { 
  case 3:return;break; 
  case 2:xingming(stu);break;//用户自定义函数之间的套用 
  case 1:xuehao(stu);break; 
  default:printf("无效的选择!请重新输入!\n");break; 
  } 
 }
}
void xuehao(struct student stu[M])//自定义学号查询函数
{
 int j,flag=0;
 char xh[25];
 system("cls");
 printf("请输入你想要查询的学生的学号");
 scanf("%s",xh);
 fflush(stdin);
 for(j=0;j<count;j++)
 {
  if(strcmp(stu[j].num,xh)==0)
  {
   printf("学号:%s\t",stu[j].num);
         printf("姓名:%s\t",stu[j].name);
         printf("年龄:%d\t",stu[j].age);
            printf("性别:%s\t",stu[j].x);
         printf("出生年月:%s\t",stu[j].year_month_day);
           printf("地址:%s\t",stu[j].address);
         printf("电话:%d\t",stu[j].iphone);
         printf("E-mail:%s\t",stu[j].e_mail);
         printf("数学:%d\t英语:%d\t物理:%d\tC语言:%d\t体育:%d\n",stu[j].xx,stu[j].yy,stu[j].wl,stu[j].cyy,stu[j].pe);
  }
 }
 if(j==count)
 {
  printf("很抱歉,没有你所需要的学生信息\n");
 }
}
void xingming(struct student stu[M])//自定义姓名查询函数
{
 int j,flag=0;
 char xm[25];
 system("cls");
 printf("请输入你想要查询的学生的姓名");
 scanf("%s",xm);
 fflush(stdin);
 for(j=0;j<count;j++)
 {
  if(strcmp(stu[j].name,xm)==0)
  {
   printf("学号:%s\t",stu[j].num);
         printf("姓名:%s\t",stu[j].name);
         printf("年龄:%d\t",stu[j].age);
            printf("性别:%s\t",stu[j].x);
         printf("出生年月:%s\t",stu[j].year_month_day);
           printf("地址:%s\t",stu[j].address);
         printf("电话:%d\t",stu[j].iphone);
         printf("E-mail:%s\t",stu[j].e_mail);
         printf("数学:%d\t英语:%d\t物理:%d\tC语言:%d\t体育:%d\n",stu[j].xx,stu[j].yy,stu[j].wl,stu[j].cyy,stu[j].pe);
  }
 }
 if(j==count)
 {
  printf("很抱歉,没有你所需要的学生信息\n");
 }
}
void order(struct student stu[M])//自定义排序函数
{
 int j,k,choice,max; 
    system("cls"); 
 printf("请输入你想要进行排序的方式\n");//所有排序的方式均是降序
 printf("1、数学 2、英语 3、物理 4、C语言 5、体育\n"); 
 scanf("%d",&choice); 
 switch(choice) 
 {
 case 1:for(j=0;j<count;j++)    
     { 
      max=j;  
      for(k=j+1;k<count;k++)    
       if (stu[k].xx>stu[max].xx)    
       {t=stu[k];stu[k]=stu[max];stu[max]=t;}     
           };break; 
 case 2:for(j=0;j<count;j++)     
     { 
      max=j;  
      for (k=j+1;k<count;k++)    
       if (stu[k].yy>stu[max].yy)    
       {t=stu[k];stu[k]=stu[max];stu[max]=t;}//整个为排序部分,采用了选择排序的方法     
           };break; 
 case 3:for(j=0;j<count;j++)     
     { 
      max=j;  
         for (k=j+1;k<count;k++)    
       if (stu[k].wl>stu[max].wl)    
       {t=stu[k];stu[k]=stu[max];stu[max]=t;}     
           };break; 
 case 4:for(j=0;j<count;j++)     
     { 
      max=j;  
      for (k=j+1;k<count;k++)    
       if (stu[k].cyy>stu[max].cyy)    
       {t=stu[k];stu[k]=stu[max];stu[max]=t;}     
           };break; 
 case 5:for(j=0;j<count;j++)     
     { 
      max=j;  
      for (k=j+1;k<count;k++)    
       if (stu[k].pe>stu[max].pe)    
       {t=stu[k];stu[k]=stu[max];stu[max]=t;}     
           };break; //强制类型转换符号只能用于有操作数,根据赋值运算中的类型转换问题可知      
 default:printf("无效的选择!请重新输入!\n");break; 
 }
}
void delete_s(struct student stu[M])//自定义删除函数(按学号删除)
{
 int j,index=0,k=count;
 char xh[25];
 system("cls");
 if(count==0)
 {
  printf("当前已存学生信息为0个,无法删除!!!\n");
  return;
 }
 else
 {
  printf("请输入你想要删除的同学学号\n"); 
  scanf("%s",xh); fflush(stdin); 
  for(j=0;j<count;j++) 
  { 
   if(strcmp(stu[j].num,xh)==0) 
   { 
    for(j=index;j<count;j++) 
     stu[j]=stu[j+1]; 
    count--; 
    if(count<k) 
     printf("你已经删除成功\n"); 
   } 
   index++;
  } 
  if(j==count) 
   printf("抱歉!!!没有你所需要删除的学生信息!*_*!\n");
 }
}
void modify(struct student stu[M])//自定义修改函数
{
 int j,flag=0,course; 
 char xh[25]; 
 system("cls"); 
 if (count==0) 
 { 
  printf("当前已存学生信息为0个,无法修改!!!\n"); 
  return; 
 } 
 else 
 { 
  printf("请输入你想要修改的同学学号\n"); 
  scanf("%s",&xh); 
  fflush(stdin); 
  for(j=0;j<count;j++) 
   if (strcmp(stu[j].num,xh)==0)       
   { 
    printf("你确定要修改学生的信息吗?如果不确定的话,请关掉本程序吧!\n"); 
    printf("选择课程: 1、数学 2、英语 3、物理 4、C语言 5、体育\n"); 
    scanf("%d",&course); 
    printf("请输入你想要修改后的学生成绩\n"); 
    switch(course) 
    { 
    case 1:scanf("%d",&stu[j].xx);break; 
    case 2:scanf("%d",&stu[j].yy);break;//switch控制语句 
    case 3:scanf("%d",&stu[j].wl);break; 
    case 4:scanf("%d",&stu[j].cyy);break; 
    case 5:scanf("%d",&stu[j].pe);break; 
    default:printf("无效的选择!请重新输入!\n");break;
    }
    printf("选择信息: 1、学号 2、姓名 3、年龄 4、性别 5、出生年月 6、地址 7、电话 8、E-mail\n"); 
    scanf("%d",&course);  
    switch(course) 
    {
    case 1:scanf("%s",stu[j].num);break;
             case 2:scanf("%s",stu[j].name);break;
             case 3:scanf("%d",&stu[j].age);break;
             case 4:scanf("%s",stu[j].x);break;
             case 5:scanf("%s",&stu[j].year_month_day);break;
             case 6:scanf("%s",stu[j].address);break;
             case 7:scanf("%d",&stu[j].iphone);break;
             case 8:scanf("%s",stu[j].e_mail);break;
    default:printf("无效的选择!请重新输入!\n");break;
    }
   }
 }
 return; 
}
void filewrite(struct student stu[M])//自定义写入文件函数
{ 
 int j=0;  
 printf("请选择是否要存入已输入的学生信息:'y'还是'n'???\n"); 
 scanf("%c",&f); 
 fflush(stdin); 
 while(f!='y'&&f!='n')
 { 
  if (f!='y'&&f!='n') 
   printf("输入错误,请重新输入\n"); 
  printf("以下操作将会覆盖已存储的数据,确定请输入'y'或'n'?\n"); 
  scanf("%c",&f); 
  fflush(stdin); 
 } 
 if (f=='y') 
 { 
  if((fp=fopen("E:\\stu.dat","w"))==NULL) 
  {  
   printf("cannot open this file\n");  
   exit(0); 
  } 
  for(j=0;j<count;j++)   
  {
   fwrite(&stu[j],sizeof(struct student),1,fp); 
  } 
  fclose(fp); 
  if(count==0)  
   printf("没有文件,无法保存\n"); 
  else 
   printf("数据存储完毕\n"); 
  system("pause"); 
 } 
 else  
  return;
}
void fileread(struct student stu[M])//自定义读取文件信息函数
{ 
 int j=0;  
 system("cls"); 
 printf("请选择是否要读取已输入的学生信息:'y'还是'n'?\n"); 
 scanf("%c",&f); 
 fflush(stdin);  
 if (f=='y') 
 { 
  if((fp=fopen("E:\\stu.dat","r"))==NULL) 
  {  
   printf("cannot open this file\n");  
   exit(0); 
  } 
  fread(&stu[j],sizeof(struct student),1,fp);  
  count=0; 
  count++; 
  j++; 
  while(fread(&stu[j],sizeof(struct student),1,fp)) 
  {  
   j++;  
   count++; 
  } 
  fclose(fp); 
  printf("数据读取完毕!\n"); 
  system("pause"); 
 } 
 else 
  return;
}
  • 11
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值