最近很多同学因为学校的要求,需要完成自己的那个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. 神秘的角落之张东升做了Java老师,悲剧就这样开始了

    故事背景   主人公张东升是某大学某软件学院的一名Java老师,他平时给学生讲课风格古怪呆板,加上他普通话不标准,一口家乡话,每次给学生讲课都分两种情况: 第一种情况:手持课本,把本节要讲的内容按书本 ...

  2. HTML5(一)初识HTML5

    HTML5 简介 HTML5是HTML最新的修订版本,2014年10月由万维网联盟(W3C)完成标准制定. 目的是为了在移动设备上支持多媒体. HTML5 的改进 完全支持 CSS3 Video 和 ...

  3. 基础设计模式-03 从过滤器(Filter)校验链学习职责链模式

    1.职责链路模式 1.1UML图 1.2 职责链路模式的概念 为了避免处理对象的耦合关系,将对象连成一个链,沿着这个链进行访问,直到有一个对象处理位置: 1.3 优点 1.按照一定的顺序执行判断: 2 ...

  4. sun.reflect.generics.reflectiveObjects.TypeVariableImpl cannot be cast to java.lang.Class

    1.首先,问题出现的点是在泛型 我出现问题的原因是,和泛型有关系,要调整泛型 2.我把问题出现的过程描述一哈子 1.基础类 @tk.mybatis.mapper.annotation.Register ...

  5. MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序

    MySQL索引 索引分类 最左前缀原则 覆盖索引 索引下推 联合索引顺序   What's Index ? 索引就是帮助RDBMS高效获取数据的数据结构. 索引可以让我们避免一行一行进行全表扫描.它的 ...

  6. Spring MVC原理简要概括

    本篇简要讲解SpringMVC 的运作方式 Spring 的 web 框架是一个设计良好的 web MVC 框架.MVC模式导致应用程序的不同方面(输入逻辑,业务逻辑和UI逻辑)分离,同时提供这些元素 ...

  7. 状压DP之愤怒的小鸟

    题目 传送们P2831 题目较长,不加以赘述 直接步入正题 首先是数学知识,我们可以先根据给出的任意两只猪构建相应的抛物线,同时再构建完之后应判断抛物线的合法性(比如a小于0啊,等等),公式推演就不在 ...

  8. Jmeter系列(33)- 跨平台运行 Jmeter,CSV 文件路径如何设置?

    如果你想从头学习Jmeter,可以看看这个系列的文章哦 https://www.cnblogs.com/poloyy/category/1746599.html 抛出问题 上一篇文章中详细讲解了 CS ...

  9. day56 js收尾,jQuery前戏

    目录 一.原生js事件绑定 1 开关灯案例 2 input框获取焦点,失去焦点案例 3 实现展示当前时间,定时功能 4 省市联动 二.jQuery入门 1 jQuery的两种导入方式 1.1 直接下载 ...

  10. Python and or not 优先级

    not > and >or 1 or 5 and 4: -> 1 or 4-> 1 (1 or 5) and 4: ->1 and 4 ->4 x or y . x ...