C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5560字,纯文字阅读大概需要8分钟。
内容图文
![C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享](/upload/InfoBanner/zyjiaocheng/1334/b08b5d1755e14186ab99d2895050517e.jpg)
最近很多同学因为学校的要求,需要完成自己的那个C语言课程设计,于是就有很多人私信或者加我私聊我,问的最多的还是《学生成绩管理系统》,其实当你项目写多了你就会发现:其实各类的管理系统都离不开一个核心——链表!
是的,不管是你想要写学生成绩管理系统,宿舍管理系统、火车票管理系统亦或者还是旅游管理系统等等,都需要用的到我们的链式结构来写,那么今天呢,我们就来看看如何利用C语言链式管理系统应该如何来写!
本期分享并不是直接教大家写这个学生成绩管理系统,而是以这个为线头,引出我们的大学项目类管理系统核心——链式结构。
话不多说,我们接下来就来看看我们的本文核心——链式结构管理系统的核心源码吧!让你做到:一表在手,系统我有!
源码献上
先来看看我们的singleList.h文件的代码,这个文件实际上也就是对我们的数据进行具体的操作,当然,核心还是我们的链式结构:
#include <stdio.h> #include <stdlib.h> #include <string.h> struct MM { char name[20]; int age; int num; char addr[20]; }; 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---sizefor (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---sizefor (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)>0) { 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 = 0; struct MM tempData; //存储用户的数据struct Node* posNode = NULL; scanf("%d", &userKey); switch (userKey) { case0: printf("正常退出,欢迎下次光临!\n"); system("pause"); exit(0); break; case1: //为当前函数传参 //增加全局变量 printf("请输入信息:(name,age,num,addr):"); scanf("%s%d%d%s", tempData.name, &tempData.age, &tempData.num, tempData.addr); insertByHead(list,tempData); break; case2: printList(list); break; case3: //修改 --->修改作业 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; case4: //查找 printf("请输入要查找的姓名:"); scanf("%s", tempData.name); searchAllInfo(list, tempData.name); break; case5: //删除 printf("请输入要删除的姓名:"); scanf("%s", tempData.name); deleteByAppoin(list, tempData.name); break; case6: BubbleSortList(list); break; // default: printf("输入错误!,重新输入!\n"); break; } } int main() { list = createHead(); //1.创建容器while (1) { makeMenu(); keyDown(); system("pause"); system("cls"); } system("pause"); return0; }
好了,本期分享就到这里了!希望能够对大家有帮助,希望大家都能依照本文分享的东西自己完成自己的管理系统哦~
其实做为一个编程学习者,有一个学习的氛围跟一个交流圈子特别重要这里我推荐一个C语言C++交流Q群1108152000,不管你是小白还是转行人士欢迎入驻,大家一起交流成长。
微信公众号:C语言编程学习基地,学习C/C++编程知识,欢迎关注~
原文:https://www.cnblogs.com/yxy6/p/13122191.html
内容总结
以上是互联网集市为您收集整理的C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享全部内容,希望文章能够帮你解决C/C++编程笔记:C语言成绩管理系统!链式结构的管理系统源码分享所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。