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("************* 欢迎进入学生管理系统 *************\n");
 34     while (1)
 35     {
 36         printMenu();
 37         alternation(head);
 38     }
 39     return 0;
 40 }
 41 
 42 void printMenu()
 43 { // 菜单
 44     printf("\n - - - - - - - - -\n");
 45     printf("| 1.添加学生信息  |\n");
 46     printf("| 2.删除学生信息  |\n");
 47     printf("| 3.修改学生信息  |\n");
 48     printf("| 4.查找学生信息  |\n");
 49     printf("| 5.显示全部信息  |\n");
 50     printf("| 6.退出系统      |\n");
 51     printf(" - - - - - - - - \n");
 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("该学生的信息如下:\n");
165             printf("姓名:%s\n学号:%d\n性别:%s\n英语成绩:%d\n语文成绩:%d\n数学成绩:%d\n",
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个学生的信息,信息如下:\n",head->length);
216     while (p != NULL)
217     {
218         printf("学号:%d  姓名:%s  性别:%s  英语成绩:%d  语文成绩:%d 数学成绩:%d\n",
219                p->stuID, p->stuName, p->gender, p->score[0], p->score[1], p->score[2]);
220         p = p->next;
221     }
222 }

 

posted @ 2019-12-06 19:40  霜见  阅读(460)  评论(0编辑  收藏  举报