【数据结构】班级管理系统

问题描述

为自己所在的班级建立一个小型的管理系统,该系统能够方便实现查询每个同学的基本情况,能够进行插入与删除操作(笔者使用文件实现上述操作)。其中:每位同学的信息包括:学号、姓名、年龄、电话以及籍贯。
一堆废话
很久没有更新博客了,小白刚刚历经考试周的打击,百废待兴,赶紧跑来CSDN和小伙伴们取暖安慰受伤的心灵。近期会陆续写四篇数据结构课设的博客,然后再写两篇编写小游戏的博客,一个是基于Python的飞机大战,另一个是基于C++并在funcode上完成的海底世界游戏。

数据描述

(1)定义一个顺序表,顺序表中的元素包括结构体类型(Stu)的数组和顺序表的长度。
(2)结构体Stu其中的元素包括学号、姓名、年龄、电话以及籍贯。

typedef struct{
	int number; //学号
	char name[100];//姓名
	short age;//年龄
	char phnumber[100];//电话
	char adr[100];//籍贯
}Stu;
typedef struct {
	Stu s[20];
	int length;
}SqList;

程序代码

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct{
  int number; 
  char name[100];
  short age;
  char phnumber[100];
  char adr[100];
}Stu;
typedef struct {
  Stu s[20];
  int length;
}SqList;
//输入学生信息
void CreatStudent(SqList &L,int n) 
{
  L.length=0;
  for(int i=0;i<n;i++)
  {
    printf("输入第%d个学生信息\n",i+1);
    printf ("学号:");
    scanf("%d",&L.s[i].number);
    printf ("姓名:");
    scanf("%s",&L.s[i].name);
    printf ("年龄:");
    scanf("%d",&L.s[i].age);
    printf ("电话:");
    scanf("%s",&L.s[i].phnumber);
    printf ("地址:");
    scanf("%s",&L.s[i].adr);
    L.length++;
  }
  FILE *fp;
  fp=fopen("student.txt","w+");//w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。
  for(int i=0;i<L.length;i++)
  {
    fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);    
  }
  printf("添加成功!");
  fclose(fp);
}
//插入学生信息
void InsertStudent(SqList &L) 
{
    int i=0; 
    int flag=0;
    L.length=0;
    FILE *fp1;
    fp1=fopen("student.txt","r+");//r+ 以可读写方式打开文件,该文件必须存在 
    while(!feof(fp1))//feof为判断是否读到文件尾
    {
      fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
      L.length++;
      i++;
    }  
    L.length--;
    fclose(fp1);
    int j;
//    printf("输入要插入学生信息\n");
  printf ("输入要插入学生学号:");
  scanf("%d",&L.s[L.length].number);
  for(i=0;i<L.length;i++)
  {
    if(L.s[i].number==L.s[L.length].number)
    {
      flag=1;
    }    
  }
  if(flag==1)
    printf("有该同学,插入失败!");
  else
  {
    printf ("姓名:");
    scanf("%s",&L.s[L.length].name);
    printf ("年龄:");
    scanf("%d",&L.s[L.length].age);
    printf ("电话:");
    scanf("%s",&L.s[L.length].phnumber);
    printf ("地址:");
    scanf("%s",&L.s[L.length].adr);  
    L.length++;        
      FILE *fp;
      fp=fopen("student.txt","w+");
      for(int i=0;i<L.length;i++)
      {
          fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);          
      }
      printf("插入成功!");
      fclose(fp);
  }    
}
//删除学生信息 
void DeleteStudent(SqList &L)
{
  int i=0,k,j;
  int num,flag=0; 
  L.length=0;
  printf("输入要删除学生的学号:");
  scanf("%d",&num);
    FILE *fp1;
    fp1=fopen("student.txt","r+");
  while(!feof(fp1))
  {
    fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
    L.length++;
    i++;
  }  
  L.length--;
  fclose(fp1);
  for(i=0;i<L.length;i++)
  {
    if(L.s[i].number==num)
    {
      k=i;
      flag=1;
    }    
  }
  if(flag==0)
    printf("没有找到该同学,插入失败!");
  else
  {
    for(j=k;j<L.length;j++)
        L.s[j]=L.s[j+1];
      L.length--;
      FILE *fp;
      fp=fopen("student.txt","w+");
      for(int i=0;i<L.length;i++)
      {
          fprintf(fp,"%d %s %d %s %s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);          
      }
      printf("删除成功!");
      fclose(fp);
  }  
}
//查询学生信息
void SearchStudent(SqList &L)
{
  int i=0,k,j;
  int flag=0;
  L.length=0; 
  char na[20]; 
  printf("输入要查询学生的姓名:");
  scanf("%s",na);
  FILE *fp1;
    fp1=fopen("student.txt","r+");
  while(!feof(fp1))
  {
    fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
    L.length++;
    i++;
  }  
  L.length--;
  fclose(fp1);
  for(i=0;i<L.length;i++)
  {
    if(strcmp(L.s[i].name,na)==0)
    {
      k=i;
      flag=1;
    }    
  }
  if(flag==0)
    printf("没有找到该同学,查询失败!");
  else
    printf("学号:%d  姓名:%s  年龄:%d  电话:%s  地址:%s\n",L.s[k].number,L.s[k].name,L.s[k].age,L.s[k].phnumber,L.s[k].adr);              
}
//显示学生信息 
void ShowAll(SqList &L)
{
  int i=0;
  L.length=0;
  FILE *fp1;
    fp1=fopen("student.txt","r+");
  while(!feof(fp1))
  {
    fscanf(fp1,"%d %s %d %s %s",&L.s[i].number,L.s[i].name,&L.s[i].age,L.s[i].phnumber,L.s[i].adr);
    L.length++;
    i++;
  }  
  L.length--;
  fclose(fp1);
  printf("\n");
  for(i=0;i<L.length;i++)
  {
    printf("学号:%d  姓名:%s  年龄:%d  电话:%s  地址:%s\n",L.s[i].number,L.s[i].name,L.s[i].age,L.s[i].phnumber,L.s[i].adr);              
  }
}
int main()
{
  SqList L;
  int n;
  int option; 
  printf("\n**********欢迎使用班级管理系统**********");  
  while(1)
  {        
    printf("\n*************1.创建学生信息*************");
        printf("\n*************2.插入学生信息*************");  
        printf("\n*************3.删除学生信息*************");
        printf("\n*************4.查询学生信息*************");
        printf("\n*************5.查看学生信息*************");
        printf("\n***********6.退出班级管理系统***********\n");
        printf("***********请选择需要的服务:************\n");
        scanf("%d",&option);
        system("cls");
        switch(option)
        {
          case 1:
            printf("请输入学生个数:");
            scanf("%d",&n);
            CreatStudent(L,n);
            break;
          case 2:
            InsertStudent(L);               
            break;
          case 3:
            DeleteStudent(L);              
            break;
          case 4:
            SearchStudent(L);
            break; 
         case 5:
            ShowAll(L);
            break; 
         case 6:
            exit(0);
            break;
    }
  }
  return 0;
}

测试数据

(1)初始化学生信息到studen.txt
在这里插入图片描述
(2)插入新的学生信息
在这里插入图片描述
若原文件中已经存在学号为4 的同学,插入失败!
在这里插入图片描述
(3)删除学生信息
在这里插入图片描述
(4)查询学生信息
在这里插入图片描述
(5)查看文件中已经存有的所有学生的信息
在这里插入图片描述
(6)student.txt文件中存放的信息
在这里插入图片描述

  • 2
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Up_Long

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值