C/C++培训
达内IT学院
400-996-5531
传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统。首先给大家总结下为什么你们学习C语言会觉得难,尤其是对于单链表这块,主要原因得是因为一下两点:
编写流程不清晰
功能设计不清晰
基于单链表得学生成绩管理系统分为两个模块。
#include #include #include struct student { char name[20]; charnum[20]; int math; int english; }; struct Node { //int data; struct student data; struct Node* next; }; struct Node* createList { //指针的基础:指针变成变量:需要内存 struct Node*headNode= (struct Node*)malloc(sizeof(struct Node)); //那么他就可以表示变量,初始化变量里面的东西 //由于功能限制,导致有些东西不需要初始化 headNode->next = NULL; return headNode; } //2.创建结点:数据 struct Node* createNode(struct student data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); ewNode->data = data; ewNode->next = NULL; return newNode; } //插入 学会一种方法就可以:表头插入 组成链表就是连接过程,结构体变量连接结构体 //函数参数是有意义的东西,插入那个链表?--》list 插入的数据是多少--》data void insertNodeByHead(struct Node* headNode, struct student data) { //表头法插入 //1.创建结点 struct Node* newNode = createNode(data); //插入 ewNode->next = headNode->next; headNode->next = newNode; } //查找 struct Node*findByName(struct Node* headNode, char * name) { struct Node* pMove = headNode->next; while (pMove) { //比较,改为字符串比较 if (!strcmp(pMove->data.name,name)) { return pMove; } //没有往下走 pMove = pMove->next; } return NULL; } //删除--》指定删除 void deleteNodeByName(struct Node* headNode, char * name) { //找到指定位置那个结点,以及制定位置前面那个结点 //要有两个相邻的指针 struct Node* p = headNode;//前面那个 struct Node* q = headNode->next;//后面那个 if (q == NULL) { printf("么有(没有)可用信息,无法删除 "); } else { while (strcmp(q->data.name,name)) { p = q;//p到达q的位置 q = p->next;//q到达q的下一个 if (q == NULL) { printf("未找到制定位置,无法删除 "); return; } } p->next = q->next; free(q); } } //删除--》指定删除 void deleteNodeByNum(struct Node* headNode, char * num) { //要有两个相邻的指针 if (q == NULL) { } else { while (strcmp(q->data.num, num)) { p = q;//p到达q的位置 if (q == NULL) { return; } } p->next = q->next; free(q); } } //打印 void printList(struct Node*headNode) { //要从二个开始打印 //定义一个移动的指针 printf("姓名 编号 数学 英语 "); while (pMove) { printf("%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english); pMove = pMove->next; } printf(" "); } 系统设计 C语言基于单链表得学生成绩管理系统
#define _CRT_SECURE_NO_WARNINGS #include #include #include "singleList.h" struct Node* list = createList; //界面 void menu { printf(" "); printf(" 0.退出系统 "); printf(" 1.录入信息 "); printf(" 2.显示信息 "); printf(" 3.删除信息 "); printf(" 4.查找信息 "); printf(" 5.保存到文件 "); } void menuOfDelete { printf(" 1.按照姓名删除 "); printf(" 2.按照学号删除 "); } voidkeyDownOfDelete { intchoice; scanf("%d", &choice); char name[20]; char num[20]; switch (choice) { case 1://1.按照姓名删除 printf("请输入要删除的姓名:"); scanf("%s", name); deleteNodeByName(list, name); break; case 2://2.按照学号删除 printf("请输入要删除的学号:"); scanf("%s", num); deleteNodeByNum(list, num); break; default: printf("输入错误,无法删除 "); } } //保存到文件 void saveInfoToFile(struct Node* list, char *filePath, char *mode) { struct Node* pMove = list->next; FILE *fp =fopen(filePath, mode); while (pMove) { fprintf(fp, "%s %s %d %d ", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english); pMove = pMove->next; } fclose(fp); } void readInfoFromFile(struct Node* list, char *filePath, char *mode) { struct student data; while (fscanf(fp, "%s %s %d %d ", data.name, data.num, &data.math, &data.english) !=EOF) { insertNodeByHead(list, data); } fclose(fp); } //交互:按键操作+鼠标操作C语言:按键操作 void keyDown { int choice; struct student stuInfo; chartemp= ' '; switch (choice) { case 0: system("pause"); exit(0); break; case 1://1.录入信息 while (1) { printf("请输入学生的姓名,编号,math,english:"); fflush(stdin); scanf("%s%s%d%d", stuInfo.name, stuInfo.num, &stuInfo.math, &stuInfo.english); //链表的插入 insertNodeByHead(list, stuInfo); printf("是否继续?(N)"); fflush(stdin); temp = getchar; if (temp == 'N' ||temp== 'n') break; } break; case 2://2.显示信息 printList(list); break; case 3://3.删除信息 menuOfDelete; keyDownOfDelete; break; case 4://4.查找信息 printf("请输入要查找的学生的姓名:"); scanf("%s", stuInfo.name); if (findByName(list, stuInfo.name) != NULL) { printf("%s %s %d %d ", findByName(list, stuInfo.name)->data.name, findByName(list, stuInfo.name)->data.num, findByName(list, stuInfo.name)->data.math,findByName(list, stuInfo.name)->data.english); } else { printf("未找到相关信息! "); } break; case 5://5.保存到文件 saveInfoToFile(list,"1.txt", "w"); break; default: printf("输入错误,重新输入 "); break; } } int main { readInfoFromFile(list, "1.txt", "r"); while (1) { menu; keyDown; system("pause"); system("cls"); } return 0; }
和大家说了这么多,并不是告诉大家我的技术有多么多么的牛,而是想告诉大家,只要你有决心和意志,要好学C/C++并没那么难。要混口饭吃也不是这么难哦。
填写下面表单即可预约申请免费试听!怕钱不够?可就业挣钱后再付学费! 怕学不会?助教全程陪读,随时解惑!担心就业?一地学习,可全国推荐就业!
Copyright © 京ICP备08000853号-56 京公网安备 11010802029508号 达内时代科技集团有限公司 版权所有
Tedu.cn All Rights Reserved