• C语言学生管理系统


    想练习一下链表,所以就有了这个用C写的学生管理系统

    没有把它写入文件,才不是因为我懒哈哈哈,主要是为了练习链表的

      1 #include<stdio.h>
      2 #include<stdlib.h>
      3 #include<string.h>
      4 
      5 typedef struct student
      6 { // 定义学生的基本数据
      7     char stuName[10]; // 姓名
      8     long stuID;  // 学号
      9     char gender[5];  // 性别
     10     int score[3];  // 三门课的成绩
     11     struct student* next;
     12 }stu, *LNode;
     13 
     14 typedef struct headNode
     15 { // 定义链表的头结点类型
     16     int length; // 储存学生数量
     17     struct student* next;
     18 }HNode;
     19 
     20 HNode* InitList();
     21 void printMenu();
     22 void alternation(HNode* head);
     23 int isExist(HNode* head, long existID);
     24 void addStu(HNode* head);
     25 void deleteStu(HNode* head);
     26 void searchStu(HNode* head);
     27 void modifyStu(HNode* head);
     28 void displayStu(HNode* head);
     29 
     30 int main()
     31 {
     32     HNode* head = InitList();
     33     printf("************* 欢迎进入学生管理系统 *************
    ");
     34     while (1)
     35     {
     36         printMenu();
     37         alternation(head);
     38     }
     39     return 0;
     40 }
     41 
     42 void printMenu()
     43 { // 菜单
     44     printf("
     - - - - - - - - -
    ");
     45     printf("| 1.添加学生信息  |
    ");
     46     printf("| 2.删除学生信息  |
    ");
     47     printf("| 3.修改学生信息  |
    ");
     48     printf("| 4.查找学生信息  |
    ");
     49     printf("| 5.显示全部信息  |
    ");
     50     printf("| 6.退出系统      |
    ");
     51     printf(" - - - - - - - - 
    ");
     52 }
     53 
     54 void alternation(HNode *head) 
     55 { //  选择要执行的操作
     56     int option;
     57     printf("请选择操作:");
     58     scanf("%d", &option);
     59     switch (option) 
     60     {
     61     case 1:    addStu(head); break;  //添加
     62     case 2:    deleteStu(head); break;   //删除
     63     case 3:    modifyStu(head); break;   //修改
     64     case 4:    searchStu(head); break;    //查询
     65     case 5:    displayStu(head); break;    //显示全部学生信息
     66     case 6: printf("退出系统,再见。"); exit(0);
     67     default: printf("输入错误,请重新输入:");
     68     }
     69 }
     70 
     71 HNode* InitList()  
     72 { // 初始化链表
     73     HNode* head = NULL;
     74     head = (HNode*)malloc(sizeof(HNode));
     75     head->length = 0;
     76     head->next = NULL;
     77     return head;
     78 }
     79 
     80 void addStu(HNode* head)  // 添加学生信息
     81 { // 前插法添加学生信息
     82     LNode p = NULL;
     83     p = (stu*)malloc(sizeof(stu));
     84     p->next = NULL;
     85     //- - - - - - - - 开始录入信息 - - - - - - - -//
     86     printf("请输入学号(输入-1录入结束):");
     87     scanf("%d", &p->stuID);
     88     if (p->stuID == -1)
     89         return;
     90     if (isExist(head, p->stuID))
     91     { // 在添加之前判断是否已存在该学生
     92         printf("已存在该学生信息,无需输入!");
     93         return;
     94     }
     95     //getchar();
     96     printf("请输入姓名:");
     97     scanf("%s", &p->stuName);
     98     printf("请输入性别:");
     99     scanf("%s", &p->gender);
    100     printf("请输入成绩(英语、语文、数学):");
    101     for (int i = 0; i < 3; i++)
    102     {
    103         scanf("%d", &p->score[i]);
    104     }
    105     //- - - - - - - - 录入信息结束 - - - - - - - -//
    106     head->length ++;
    107     p->next = head->next; // 更新学生人数
    108     head->next = p;
    109     printf("添加成功!");
    110 }
    111 
    112 void deleteStu(HNode* head)
    113 { // 删除某个学生的信息
    114     stu* temp = NULL;
    115     stu* p = head->next;
    116     long deleteID;
    117     printf("请输入要删除学生的学号:");
    118     scanf("%d", &deleteID);
    119     if (!isExist(head, deleteID))
    120     { // 在删除之前判断是否已存在该学生
    121         printf("不存在该学生,删除失败!");
    122         return;
    123     }
    124     while (p != NULL) 
    125     {
    126         if (p->next->stuID == deleteID)
    127         { 
    128             temp = p->next;
    129             p->next = p->next->next;
    130             free(temp);
    131         }
    132         p = p->next;
    133     }
    134     printf("删除成功!");
    135 }
    136 
    137 int isExist(HNode* head,long existID)
    138 {  // 判断学生是否存在
    139     stu* p = head->next;
    140     while (p != NULL)
    141     {
    142         if (p->stuID == existID)
    143             return 1;
    144         p = p->next;
    145     }
    146     return 0;
    147 }
    148 
    149 void searchStu(HNode* head)
    150 { // 查找某个学生的信息
    151     long searchID;
    152     stu* p = head->next;
    153     printf("请输入要查询的学号:");
    154     scanf("%d", &searchID);
    155     if (!isExist(head, searchID))
    156     { // 在查询之前判断是否不存在该学生
    157         printf("不存在该学生,查询失败!");
    158         return;
    159     }
    160     while (p != NULL) 
    161     {
    162         if (p->stuID == searchID)
    163         {
    164             printf("该学生的信息如下:
    ");
    165             printf("姓名:%s
    学号:%d
    性别:%s
    英语成绩:%d
    语文成绩:%d
    数学成绩:%d
    ",
    166                 p->stuName, p->stuID, p->gender, p->score[0], p->score[1], p->score[2]);
    167             return;
    168         }
    169         p = p->next;
    170     }
    171 }
    172 
    173 void modifyStu(HNode* head)
    174 { // 修改某个学生的信息,支持单项信息修改
    175     stu* p = NULL;
    176     p = head->next;
    177     long modifyID;
    178     printf("输入要修改信息的学生的学号:");
    179     scanf("%d", &modifyID);
    180     if (!isExist(head, modifyID))
    181     { // 在修改之前判断是否已存在该学生
    182         printf("不存在该学生,修改失败!");
    183         return;
    184     }
    185     while (p != NULL) 
    186     {
    187         if (p->stuID == modifyID)
    188         {
    189             int option;
    190             long newID;
    191             char newName[10];
    192             char newGender[5];
    193             int newScore;
    194             printf("请输入要修改的项目(1.学号  2.姓名  3.性别  4.英语成绩  5.语文成绩  6.数学成绩):");
    195             scanf("%d", &option);
    196             switch (option)
    197             {
    198             case 1: printf("请输入新的学号:"); scanf("%d", &newID); p->stuID = newID; break;
    199             case 2: printf("请输入新的姓名:"); scanf("%s", newName); strcpy(p->stuName,newName); break;
    200             case 3: printf("请输入新的性别:"); scanf("%s", newGender); strcpy(p->gender,newGender); break;
    201             case 4: printf("请输入新的英语成绩:"); scanf("%d", &newScore); p->score[0] = newScore; break;
    202             case 5:    printf("请输入新的语文成绩:"); scanf("%d", &newScore); p->score[1] = newScore; break;
    203             case 6: printf("请输入新的数学成绩:"); scanf("%d", &newScore); p->score[2] = newScore; break;
    204             }
    205         }
    206         p = p->next;
    207     }
    208     printf("修改成功!");
    209 }
    210 
    211 void displayStu(HNode* head)
    212 {
    213     stu* p = NULL;
    214     p = head->next;
    215     printf("当前一共有%d个学生的信息,信息如下:
    ",head->length);
    216     while (p != NULL)
    217     {
    218         printf("学号:%d  姓名:%s  性别:%s  英语成绩:%d  语文成绩:%d 数学成绩:%d
    ",
    219                p->stuID, p->stuName, p->gender, p->score[0], p->score[1], p->score[2]);
    220         p = p->next;
    221     }
    222 }
  • 相关阅读:
    ubuntu老版本下载地址
    Device Tree
    内存映射与访问机制
    makefile要点
    lds文件
    测试风险问题探讨
    2 Player and N Coin
    google maps v3 添加自定义图标(marker,overlay)
    Evatech 机器人修剪器
    受蚂蚁启发的四足机器人链接在一起克服障碍
  • 原文地址:https://www.cnblogs.com/yytest/p/12528166.html
Copyright © 2020-2023  润新知