学生信息管理系统设计

1. 题目

学生信息管理系统设计

要求:

(1) 学生信息保存在文件中

(2) 学生信息查询、删除、修改和显示

(3) 学生信息的统计:根据性别统计、家乡和专业,统计结果可以保存文件中。

(4) 利用菜单管理

2.设计目的

(1)创建结构体和链表,利用文件读取并显示学生信息

(2)利用链表实现查询、修改、删除、统计学生信息

(3)建立菜单,利用菜单管理

3.总体设计

(1)定义学生信息结构体,创建链表,读入文件

(2)根据要求写好菜单函数

(2)分模块,用void函数写出菜单中各个选项的要求,包括修改信息函数、查询函数、删除函数、统计函数

(4)每写好一步测试一步,最终进行运行调试

4.详细设计

(1)新建头文件fun.h,在头文件中定义结构体

(2)新建两个源文件fun.h、main.c

(3)在fun.c中写入读取文件函数get_data、菜单函数menu、修改函数Mod、查询函数Sea、删除函数Del、显示函数Show、统计函数Save1(统计男女生籍贯)、Save2(统计男女生专业)

(4)在头文件fun.h中声明这些函数,并在菜单函数中对相应的选项引用相应的函数

(5)在main.c文件中写入主函数,在主函数中创建链表,并调用读取数据函数和菜单函数,实现工程管理运行

(6)把学生信息放在文本文件data.txt里,通过读取data文件获取学生信息,再通过菜单进行管理,最后将统计信息存入Tdata.txt文件里

5.调试与测试

(1)运行结果——菜单

(2)2.查询信息

(3)1.修改学生信息

(4)3.删除学生信息

(5)5.统计结果

(6)6.退出程序

在这个页面下按任意键退出

(7)4.显示学生信息

7.程序清单

(1)头文件fun.h

```c
#ifndef _FNM_H
#define _FNM_H
#include<stdlib.h>
#include<string.h>
#include<stdio.h>
struct  NODE
{
char id[20];       //学号
    char name[20];    //姓名
    char gender[20];  //性别
    char major[20];   //专业
    char home[20];    //家乡
    struct NODE *next;
};
 
void Mod(struct NODE *F);
void Sea(struct NODE *F);
void Del(struct NODE *F);
void Save1(struct NODE *F);
void Save2(struct NODE *F);
void get_data(struct NODE *F);
void Show(struct NODE *F);
void menu(struct NODE *F);
 
#endif

(2)源文件fun.c

```c
#include"fun.h"
 
void Mod(struct NODE *F)
{
    char d[20];
      int flag=0;
    printf("请输入需要修改的学生学号:");
    scanf("%s",d);
    while(F)
    {
            if(strcmp(F->id,d)==0)
        {
            printf("请输入修改后的学号 姓名 性别 专业 家乡(空格隔开):");                 scanf("%s %s %s %s %s",F->id,F->name,F->gender,F->major,F->home);
            printf("修改成功\n");
               flag=1;
            break ;
        }
        F=F->next;
       }
       if(flag==0)
       {
            printf("未找到\n");
       }
}
 
void Sea(struct NODE *F)
{
    char d[20];
      int flag=0;
    printf("请输入查询的学生学号:");
    scanf("%s",d);
    while(F)
    {
            if(strcmp(F->id,d)==0)
        {
            puts("该学生信息如下:");
            printf("学号\t姓名\t性别\t专业\t家乡\n");
                                                            printf("%s\t%s\t%s\t%s\t%s\n",F->id,F->name,F->gender,F->major,F->home);
                flag=1;
            break ;
        }
        F=F->next;
    }
    if(flag==0)
      {
          printf("未找到\n");
      }
}
 
void Del(struct NODE *F)
{
    char e[20];
      int flag=0;
    printf("请输入删除的学生学号:");
    scanf("%s",e);
    while(F->next!=NULL)
    {
        struct NODE *D=F->next;
           if(strcmp(D->id,e)==0)
        {
            F->next=D->next;
            free(D);
            printf("删除成功\n");
               flag=1;
               break;
        }
        F=F->next;
    }
    if(flag==0)
    {
        printf("未找到\n");
    }
}
 
void Save1(struct NODE *F)
{
    int a=0,b=0,c=0,d=0,e=0;
      int f=0,g=0,h=0,i=0,j=0;
    FILE *T=fopen("Tdata.txt","w");
      fprintf(T,"****************************\n男女生籍贯统计如下\n");
    while(F)
    {
        if(strcmp(F->gender,"男")==0)
        {
                if(strcmp(F->home,"湖北")==0)
                {
                    a++;
                }
                if(strcmp(F->home,"湖南")==0)
                {
                    b++;
                }
                if(strcmp(F->home,"江西")==0)
                {
                    c++;
                }
                if(strcmp(F->home,"重庆")==0)
                {
                    d++;
                }
                if(strcmp(F->home,"上海")==0)
                {
                    e++;
                }
        }
        else
        {
            if(strcmp(F->home,"湖北")==0)
                {
                    f++;
                }
                if(strcmp(F->home,"湖南")==0)
                {
                    g++;
                }
                if(strcmp(F->home,"江西")==0)
                {
                    h++;
                }
                if(strcmp(F->home,"重庆")==0)
                {
                    i++;
                }
                if(strcmp(F->home,"上海")==0)
                {
                    j++;
                }
        }
        F=F->next;
    }
    fprintf(T,"      湖北 湖南 江西 重庆 上海 总数\n");
    fprintf(T,"男     %d\t   %d\t %d\t  %d\t  %d\t  %d\n",a,b,c,d,e,a+b+c+d+e);
    fprintf(T,"女     %d\t   %d\t %d\t  %d\t  %d\t  %d\n",f,g,h,i,j,f+g+h+i+j);
    fprintf(T,"总数   %d\t   %d\t %d\t  %d\t  %d\t  %d\n",a+f,b+g,c+h,d+i,e+j,a+b+c+d+e+f+g+h+i+j);
  printf("籍贯统计完成.男女生数据保存到Tdata中\n");
    printf("        湖北\t湖南\t江西\t重庆\t上海\t总数\n");
    printf("男       %d\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e,a+b+c+d+e);
    printf("女       %d\t%d\t%d\t%d\t%d\t%d\n",f,g,h,i,j,f+g+h+i+j);
    printf("总数     %d\t%d\t%d\t%d\t%d\t%d\n",a+f,b+g,c+h,d+i,e+j,a+b+c+d+e+f+g+h+i+j);
    fclose(T);
}
 
void Save2(struct NODE *F)
{
    int a=0,b=0,c=0,d=0,e=0;
    int f=0,g=0,h=0,i=0,j=0;
  FILE *T=NULL;
    char*szAppendStr="Text";
    errno_t eResult;
    eResult=fopen_s(&T,"Tdata.txt","a+");
    fprintf(T,"****************************\n男女生专业统计如下\n");
    while(F)
    {
        if(strcmp(F->gender,"男")==0)
        {
                if(strcmp(F->major,"信工")==0)
                {
                    a++;
                }
                if(strcmp(F->major,"通信")==0)
                {
                    b++;
                }
                if(strcmp(F->major,"仪器")==0)
                {
                    c++;
                }
                if(strcmp(F->major,"电气")==0)
                {
                    d++;
                }
                if(strcmp(F->major,"自动化")==0)
                {
                    e++;
                }
        }
        else
        {
                if(strcmp(F->major,"信工")==0)
                {
                    f++;
                }
                if(strcmp(F->major,"通信")==0)
                {
                    g++;
                }
                if(strcmp(F->major,"仪器")==0)
                {
                    h++;
                }
                if(strcmp(F->major,"电气")==0)
                {
                    i++;
                }
                if(strcmp(F->major,"自动化")==0)
                {
                    j++;
                }
        }
        F=F->next;
     }
        fprintf(T,"      信工 通信 仪器 电气 自动化 总数\n");
        fprintf(T,"男     %d\t\t%d\t %d\t  %d\t   %d\t %d\n",a,b,c,d,e,a+b+c+d+e);
        fprintf(T,"女     %d\t\t%d\t %d\t  %d\t   %d\t %d\n",f,g,h,i,j,f+g+h+i+j);
        fprintf(T,"总数   %d\t\t%d\t %d\t  %d\t   %d\t %d\n",a+f,b+g,c+h,d+i,e+j,a+b+c+d+e+f+g+h+i+j);
        printf("\n");
        printf("\n");
     printf("专业统计完成.男女生数据保存到Tdata中\n");
        printf("        信工\t通信\t仪器\t电气\t自动化\t总数\n");
        printf("男       %d\t%d\t%d\t%d\t%d\t%d\n",a,b,c,d,e,a+b+c+d+e);
        printf("女       %d\t%d\t%d\t%d\t%d\t%d\n",f,g,h,i,j,f+g+h+i+j);
        printf("总数     %d\t%d\t%d\t%d\t%d\t%d\n",a+f,b+g,c+h,d+i,e+j,a+b+c+d+e+f+g+h+i+j);
        fclose(T);
}
 
void get_data(struct NODE *F)
{
    FILE *in;
    if((in=fopen("data.txt","r"))==NULL)
    {
        printf("文件不存在,请创建数据文件 data.txt");
        exit(0);
    }
 
    while(!feof(in))
    {
struct NODE *n=(struct NODE*)malloc(sizeof(struct NODE);                            fscanf(in,"%s%s%s%s%s\n",n->id,n->name,n->gender,n->major,n->home);
        F->next=n;
        n->next=NULL;
        F=n;
    }
    fclose(in);
}
 
void Show(struct NODE *F)
{
int count=0;
    F=F->next;
      printf("所有记录如下:\n学号\t姓名\t性别\t专业\t家乡\n");
    while(F)
    {                 printf("%s\t%s\t%s\t%s\t%s\n",F->id,F->name,F->gender,F->major,F->home);
        F=F->next;
           count++;
    }
      printf("总人数:%d\n",count);
}
 
void menu(struct NODE *F)
{
  int n;
    do
    {
        printf("****************************\n");
        printf("      学生信息管理系统    \n");
        printf("****************************\n");
        printf("1.修改信息\t2.查询信息\n3.删除信息\t4.显示信息\n5.统计保存\t6.退出程序\n");
        printf("****************************\n");
        printf("请输入选择:");
        scanf("%d",&n);
        system("cls");
        switch(n)
        {
        case 1:
            Mod(F);
            break;
        case 2:
            Sea(F);
            break;
        case 3:
            Del(F);
            break;
        case 4:
            Show(F);
            break;
        case 5:
            Save1(F);
            Save2(F);
            break;
        case 6:
            system("cls");
            printf("\n\n\t\t\t-------------------感谢使用!-------------------\n\n\n");
            exit(0);
            break;
        default:printf("输入错误\n");
        }
        system("pause");
        system("cls");
    }
    while(n!=0);
}

(3)源文件main.c

```c
#include"fun.h"
int main()
{
    struct NODE *F=(struct NODE*)malloc(sizeof(struct NODE));
    F->next=NULL;
    get_data(F);   //从文件读取信息
    while(1)
    {
        menu(F);
    }
    return 0;
}

  • 4
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值