最近很多同学因为学校的要求,需要完成自己的那个C语言课程设计,于是就有很多人私信或者加我私聊我,问的最多的还是《学生成绩管理系统》,其实当你项目写多了你就会发现:其实各类的管理系统都离不开一个核心——链表!

是的,不管是你想要写学生成绩管理系统,宿舍管理系统、火车票管理系统亦或者还是旅游管理系统等等,都需要用的到我们的链式结构来写,那么今天呢,我们就来看看如何利用C语言链式管理系统应该如何来写!

本期分享并不是直接教大家写这个学生成绩管理系统,而是以这个为线头,引出我们的大学项目类管理系统核心——链式结构。

话不多说,我们接下来就来看看我们的本文核心——链式结构管理系统的核心源码吧!让你做到:一表在手,系统我有!

源码献上

先来看看我们的singleList.h文件的代码,这个文件实际上也就是对我们的数据进行具体的操作,当然,核心还是我们的链式结构:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct MM
{
char name[];
int age;
int num;
char addr[];
};
struct Node
{
//int data;
struct MM data;
struct Node* next;
};
//所有涉及到数据的地方都要改
struct Node* createHead()
{
struct Node* headNode = (struct Node*)malloc(sizeof(struct Node));
headNode->next = NULL;
return headNode;
}
struct Node* createNode(struct MM data)
{
struct Node * newNode = (struct Node*)malloc(sizeof(struct Node));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
void insertByHead(struct Node* headNode, struct MM data)
{
struct Node* newNode = createNode(data);
newNode->next = headNode->next;
headNode->next = newNode;
}
//按查找浏览
void searchAllInfo(struct Node* headNode, char *name)
{
struct Node* pMove = headNode->next;
while (pMove != NULL)
{
//!strcmp(pMove->data.name,name)条件可以改为
//strcmp(pMove->data.name,name)==0
//!:否定 真变假 ,假变真
//!-1等于0
//计算机中非零表示成立
if (!strcmp(pMove->data.name, name))
printf("%s\t%d\t%d\t%s\n", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);
pMove = pMove->next;
}
}
//按姓名查找
struct Node* searchInfo(struct Node* headNode, char *name)
{
struct Node* pMove = headNode->next;
while (pMove != NULL&&strcmp(pMove->data.name, name))
{
pMove = pMove->next;
}
return pMove; //返回NULL没有找到
} //改为按照姓名的方式
//删除一个方式
void deleteByAppoin(struct Node* headNode, char *name)
{
struct Node* posNodeLeft = headNode;
struct Node* posNode = headNode->next;
//字符串比较+数据剥洋葱
while (posNode != NULL&&strcmp(posNode->data.name ,name))
{
posNodeLeft = posNode;
posNode = posNodeLeft->next;
}
if (posNode == NULL)
{
printf("未找到指定位置,无法删除!\n");
}
else
{
posNodeLeft->next = posNode->next;
free(posNode);
posNode = NULL;
printf("删除成功!\n");
}
} //删除所有姓名相同的
void deleteAll(struct Node* headNode, char *name)
{
while (searchInfo(headNode, name) != NULL)
{
deleteByAppoin(headNode, name);
}
} //修改所有姓名相同的
void modifyALL(struct Node* headNode, char *name,struct MM newInfo)
{
while (searchInfo(headNode, name) != NULL)
{
searchInfo(headNode, name)->data = newInfo;
}
} //打印-->具体需求:抬头
void printList(struct Node* headNode)
{
struct Node* pMove = headNode->next;
//表格数据的表头
printf("name\tage\tnum\taddr\n");
while (pMove != NULL)
{
//打印结构体的数据需要剥洋葱
printf("%s\t%d\t%d\t%s\n", pMove->data.name, pMove->data.age, pMove->data.num, pMove->data.addr);
pMove = pMove->next;
}
} //链表的冒泡排序
void BubbleSortList(struct Node*headNode)
{
//0---size
for (struct Node* p = headNode->next; p != NULL; p = p->next)
{
for (struct Node* q = headNode->next; q->next != NULL; q = q->next)
{
if ((q->data.age > q->next->data.age))
{
struct MM tempData = q->data;
q->data = q->next->data;
q->next->data = tempData;
}
}
}
printList(headNode);
} void BubbleSortByName(struct Node*headNode)
{
//0---size
for (struct Node* p = headNode->next; p != NULL; p = p->next)
{
for (struct Node* q = headNode->next; q->next != NULL; q = q->next)
{
if (strcmp(q->data.name, q->next->data.name)>)
{
struct MM tempData = q->data;
q->data = q->next->data;
q->next->data = tempData;
}
}
}
printList(headNode);
}

好,接下来再来将我们的这个界面给完善一下:

#define _CRT_SECURE_NO_WARNINGS
#include "singleList.h" struct Node* list = NULL; //存储数据的容器
//1.菜单
void makeMenu()
{
printf("-----------【小姐姐管理系统】--------\n");
printf("\t0.退出系统\n");
printf("\t1.录入信息\n");
printf("\t2.浏览系统\n");
printf("\t3.修改系统\n");
printf("\t4.查找显示\n");
printf("\t5.删除信息\n");
printf("\t6.排序显示\n");
printf("-------------------------------------\n");
}
//2.做按键交互
void keyDown()
{
int userKey = ;
struct MM tempData; //存储用户的数据
struct Node* posNode = NULL;
scanf("%d", &userKey);
switch (userKey)
{
case :
printf("正常退出,欢迎下次光临!\n");
system("pause");
exit();
break;
case :
//为当前函数传参
//增加全局变量
printf("请输入信息:(name,age,num,addr):");
scanf("%s%d%d%s", tempData.name, &tempData.age, &tempData.num, tempData.addr);
insertByHead(list,tempData);
break;
case :
printList(list);
break;
case : //修改 --->修改作业
printf("请输入要修改的姓名:");
scanf("%s", tempData.name);
//输入信息存储到临时变量 tempInfo
//循环去做修改: 知道posNode==NULL 位置
posNode = searchInfo(list, tempData.name);
if (posNode == NULL)
{
printf("未找到指定位置,无法修改!");
}
else
{
printf("请输入新的信息:(name,age,num,addr):");
scanf("%s%d%d%s", posNode->data.name, &posNode->data.age, &posNode->data.num, posNode->data.addr);
//posNode->data=tempInfo;
printf("修改成功!");
}
break;
case : //查找
printf("请输入要查找的姓名:");
scanf("%s", tempData.name);
searchAllInfo(list, tempData.name);
break;
case : //删除
printf("请输入要删除的姓名:");
scanf("%s", tempData.name);
deleteByAppoin(list, tempData.name);
break;
case :
BubbleSortList(list);
break; //
default:
printf("输入错误!,重新输入!\n");
break;
}
}
int main()
{
list = createHead(); //1.创建容器
while ()
{
makeMenu();
keyDown();
system("pause");
system("cls");
}
system("pause");
return ;
}

好了,本期分享就到这里了!希望能够对大家有帮助,希望大家都能依照本文分享的东西自己完成自己的管理系统哦~

其实做为一个编程学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C语言C++交流Q群1108152000,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。

微信公众号:C语言编程学习基地,学习C/C++编程知识,欢迎关注~

C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享的更多相关文章

  1. C语言 栈 链式结构 实现

    一个C语言链式结构实现的栈 mStack (GCC编译). /** * @brief C语言实现的链式结构类型的栈 * @author wid * @date 2013-10-30 * * @note ...

  2. C/C++编程笔记:C语言开发球球大作战(源码分享),你想试试吗?

    游戏背景 <球球大作战>是Superpop一款自主研du发的免费手机网络游戏. 以玩家间的实时互动PK产生游戏乐趣为设计宗旨,通过简单的规则将玩家操作直接转化为游戏策略,体验智谋碰撞的战斗 ...

  3. C语言 队列 链式结构 实现

    一个C语言链式结构实现的队列 mQueue (GCC编译). /** * @brief C语言实现的链式队列 * @author wid * @date 2013-10-31 * * @note 若代 ...

  4. 编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码

    转自:编译哈工大语言技术平台云LTP(C++)源码及LTP4J(Java)源码 JDK:java version “1.8.0_31”Java(TM) SE Runtime Environment ( ...

  5. 别走!这里有个笔记:图文讲解 AQS ,一起看看 AQS 的源码……(图文较长)

    前言 AbstractQueuedSynchronizer 抽象队列同步器,简称 AQS .是在 JUC 包下面一个非常重要的基础组件,JUC 包下面的并发锁 ReentrantLock CountD ...

  6. C/C++编程笔记:C语言实现连连看游戏,小白练手项目(源码分享)

    本篇文章分享看题目就知道是写给初学者的,学的比较好的小伙伴也可以将自动算法等一些知识给加进去,希望对大家有帮助! 好了,当我们所有的准备工作做好之后,我们就可以来编写我们的C语言连连看游戏了! 其实这 ...

  7. C语言学生管理系统源码分享

    大家好 我就是如假包换的...陈玲 自从运营了C语言程序设计微信公众号 很多粉丝都给我备注 ...奇葩 实在是不敢当 也被人开始叫玲玲姐 我知道 很多人都想看我出境 我本人也有 年多的舞台演讲训练 实 ...

  8. C/C++编程笔记:C++入门知识丨从结构到类的演变

    先来看看本节知识的结构图吧! 接下来我们就逐步来看一下所有的知识点: 结构的演化 C++中的类是从结构演变而来的, 所以我们可以称C++为”带类的C”. 结构发生质的演变 C++结构中可以定义函数, ...

  9. 基于python语言的tensorflow的‘端到端’的字符型验证码识别源码整理(github源码分享)

    基于python语言的tensorflow的‘端到端’的字符型验证码识别 1   Abstract 验证码(CAPTCHA)的诞生本身是为了自动区分 自然人 和 机器人 的一套公开方法, 但是近几年的 ...

随机推荐

  1. Wooden Stricks——两个递增条件的线性DP

    题目 一堆n根木棍.每个棒的长度和重量是预先已知的.这些木棒将由木工机械一一加工.机器需要准备一些时间(称为准备时间)来准备处理木棍.设置时间与清洁操作以及更换机器中的工具和形状有关.木工机械的准备时 ...

  2. html5中contenteditable属性如果过滤标签,过滤富文本样式

    ​​在div中使用contenteditable=”true”可以达到模拟输入框的效果,但是当我们复制其他网页内容进去的时候,会发现连带的样式也一起复制进去了.很明显我们不需要复制富文本样式,那么如何 ...

  3. (四)ansible 通过堡垒机访问内网服务器

    场景:     在ansible的使用过程中,存在这样的场景,ansible所在的管理节点与被管理的机器需要 通过一个跳板机才能连接,无法直接连接.要解决这个问题,并不需要在 ansible里做什么处 ...

  4. Emergency Evacuation 题解

    The Japanese government plans to increase the number of inbound tourists to forty million in the yea ...

  5. 如何科学地完成一场 AR 发布会?全在这份超细节活动策划 Xmind 里了

    你们在哪个酒店搭的景? 5 月 28 日,网易智慧企业完成了一场实景人物拍摄 + 虚拟舞台渲染的 AR 线上见面会.非常有趣的是,在直播过程中,不止一位观众问我们,“你们是在哪个酒店搭的景?”.看来我 ...

  6. [TZOJ] 平台训练-V1

    日常训练 训练网址:http://www.tzcoder.cn/ 1001: 整数求和 描述求两个整数之和.输入输入数据只包括两个整数A和B.输出两个整数的和.样例输入1 2样例输出3题目来源TZOJ ...

  7. wcf服务各种情况下应用

    1.控制台调用 第一步,添加wcf服务 2.写接口,记得要加好契约特性. 3.声明一个类继承wcf服务. 4.ipconfig配置 5.控制台运行 6.运行app.config里面,加上调用的接口方法 ...

  8. C++快速读写

    1.主函数的最前面加入这个 std::ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); 2.这是一个读入数字的快读 inline int read() ...

  9. Video.js随笔记

    下载与介绍 Video.js是一款web视频播放器,支持html5和flash两种播放方式.更有自定义皮肤,插件,组件,语言还有丰富的选项配置. 官网下载地址:https://videojs.com/ ...

  10. python--动态网页渲染pyqt5

    原文:https://blog.csdn.net/tymatlab/article/details/78647543 PyQt5 渲染动态网页 示例代码: # -*- coding: UTF-8 -* ...