摘要:我学院的石少师弟,最近看了我写的学生管理系统上篇,也自己简单写了个这玩意儿,身为师兄,对小师弟必然是无限关爱的啦!于是我就打算今天给大家贴一贴他写的这个小玩意儿,看看大家能不能在里面找到属于你的思路。话不多说,来人,上 program!
本篇博客出自奇牛学院学员石少师弟
开发语言: c language
开发工具:vs 2017
头文件:stdio.h stdlib.h string.h
知识点: 循环 分支判断,指针,结构体,链表
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct Student {
char Id[64]; //学号
char name[128]; //姓名
int score; //成绩
struct Student *next;
}stu;
stu *head=NULL;
bool IsEmpty();//判断链表是否为空
bool AddStu(); //添加学生
bool FindStu(); //查找学生
bool DelStu(); //删除学生
bool ChangeStu(); //修改学生
int main() {
int n;
while (1) {
printf(" ************************ \n");
printf(" ****** 奇牛研究所 ****** \n");
printf(" ************************ \n");
printf(" 1.增加学生 \n");
printf(" 2.查找学生 \n");
printf(" 3.修改学生 \n");
printf(" 4.删除学生 \n");
printf(" 0.退出 \n\n\n");
printf("请输入0-4\n");
scanf("%d", &n);
switch (n)
{
case 1:
AddStu();
break;
case 2:
FindStu();
break;
case 3:
ChangeStu();
break;
case 4:
DelStu();
break;
case 0:
exit(0);
default:
printf("输入有误,请重新输入!\n");
break;
}
}
}
bool IsEmpty()
{
if (!head) {
printf("链表为空,操作失败!\n");
return true;
}
return false;
}
bool AddStu()
{
int n;
stu *s;
//初始化头节点,头节点不存值
head = (stu*)malloc(sizeof(stu));
head->next = NULL;
if (!head) return false;
//添加学生
printf("请输入要添加的人数\n");
scanf("%d", &n);
while (n--) {
s = (stu*)malloc(sizeof(stu));
if (!s)return false;
printf("请依次输入学生的学号--姓名--成绩--\n");
scanf("%s%s%d", s->Id, s->name, &s->score);
//使用前插法
s->next = head->next;
head->next = s;
}
return true;
}
bool FindStu()
{
if (IsEmpty())return false;
char s[64];
stu *p;
p = head->next;
printf("请输入你要查找的学生编号\n");
scanf("%s", s);
while (p) {
if (!strcmp(p->Id, s)) {
printf("查找成功!\n");
printf("学号:%s\t姓名:%s\t成绩:%d\n",
p->Id, p->name, p->score);
return true;
}
p = p->next;
}
printf("未找到该学生!\n");
return false;
}
bool DelStu()
{
if (IsEmpty())return false;
char s[64];
stu * p, *q = NULL;
q = head;
bool flag = false;
printf("请输入要删除的学生编号\n");
scanf("%s", s);
while (q->next)
{
if (!strcmp(q->next->Id, s))
{
printf("学号:%s\t姓名:%s\t成绩:%d\n",
q->next->Id, q->next->name, q->next->score);
p = q->next;
q->next = p->next;
free(p);
printf("删除成功\n");
flag = true;
}
else
{
q = q->next;
}
}
if (flag)
{
return true;
}
printf("未找到该学生\n");
return false;
}
bool ChangeStu()
{
if (IsEmpty())return false;
int n;
char s[64];
bool Is = false;
stu *p;
p = head->next;
printf("请输入你要修改的学生编号\n");
scanf("%s", s);
while (p) {
if (!strcmp(p->Id, s)) {
printf("查找成功!\n");
printf("学号:%s\t姓名:%s\t成绩:%d\n",
p->Id, p->name, p->score);
Is = true;
break;
}
p = p->next;
}
if (!Is) {
printf("没有该学生!\n");
return false;
}
printf("奇牛研究所修改子菜单\n");
printf("1.修改学号\n");
printf("2.修改姓名\n");
printf("3.修改成绩\n");
printf("请输入要进行的操作\n");
scanf("%d", &n);
switch(n) {
case 1: scanf("%s", p->Id); break;
case 2: scanf("%s", p->name); break;
case 3:scanf("%d", p->score); break;
}
return true;
}
石少师弟的开发思路:手撸管理系统,先建立一个主菜单,然后各个功能完善。(这特么着实有点像我沙石乐坑人的画风啊,一堆介绍砸过去,然并卵,真可谓是少年自由少年强,华夏英雄挺脊梁啊!师兄很感动,读者很动感!动感 == 想动手的感觉…)
//结尾:
上述代码如有不懂可以加我们的学习交流群进行讨论
更多源码资料请关注我们,每周不定期更新源码,仅供学习,拒绝抄袭。
学习交流6群:1121175506
联系QQ号:1611653027
沙石乐:好了,上面就是小师弟石少最近在学习期间撸来练习c语言的学生管理系统了,建议c语言的初学者可以多看看他写的,说不定会找到属于你自己的思路喔!下班!
导演:咳咳!沙石乐,你是不是忘了啥!
我的心理活动:TMD,狗秃驴,头发都掉光了,记性还这么好!
正如我boss说的,我的c语言学生管理系统下篇,也就是高潮,就要在下周上线啦(上班啦),这特么还真是个令人绝望的消息…
吃瓜群众:是呀是呀!
沙石乐:是尼玛b,人类的本质果然是复读机!那么大家下次再见,欢迎大家来加入我们的学习讨论群,群号:1121175506,don`t say bye!