前言
传说中讲课通俗而不庸俗,说话风流而不下流的小编又来了哦,今天的主要内容是:C语言基于单链表得学生成绩管理系统。首先给年夜家总结下为什么你们学习C语言会觉得难,尤其是对单链表这块,主要原因得是因为一下两点:
编写流程不清晰功能设计不清晰
基于单链表得学生成绩管理系统分为两个模块。如果觉得代码过去,想要源码得,请私密我“代码”获取完整项目源码。
C语言基于单链表得学生成绩管理系统-1.jpg (25.2 KB, 下载次数: 0)
-7-30 23:44 上传
如果觉得代码过去,想要源码得,请私密我“代码”获取完整项目源码
单链表设计
C语言基于单链表得学生成绩管理系统-2.jpg (24.02 KB, 下载次数: 0)
-7-30 23:44 上传
如果觉得代码过去,想要源码得,请私密我“代码”获取完整项目源码
源码封装到singleList.h头文件中
#include
#include
#include
struct student
{
char name[20];
char num[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));
newNode->data = data;
newNode->next = NULL;
return newNode;
}
//插入 学会一种体例就可以:表头插入 组成链表就是连接过程,结构体变量连接结构体
//函数参数是有意义的工具,插入那个链表?--》list 插入的数据是几多--》data
void insertNodeByHead(struct Node* headNode, struct student data)
{
//表头法插入
//1.建立结点
struct Node* newNode = createNode(data);
//插入
newNode->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("么有(没有)可用信息,无法删除\n");
}
else
{
while (strcmp(q->data.name,name))
{
p = q;//p达到q的位置
q = p->next;//q达到q的下一个
if (q == NULL)
{
printf("未找到制定位置,无法删除\n");
return;
}
}
p->next = q->next;
free(q);
}
}
//删除--》指定删除
void deleteNodeByNum(struct Node* headNode, char * num)
{
//找到指定位置那个结点,以及制定位置前面那个结点
//要有两个相邻的指针
struct Node* p = headNode;//前面那个
struct Node* q = headNode->next;//后面那个
if (q == NULL)
{
printf("么有(没有)可用信息,无法删除\n");
}
else
{
while (strcmp(q->data.num, num))
{
p = q;//p达到q的位置
q = p->next;//q达到q的下一个
if (q == NULL)
{
printf("未找到制定位置,无法删除\n");
return;
}
}
p->next = q->next;
free(q);
}
}
//打印
void printList(struct Node* headNode)
{
//要从二个开始打印
//界说一个移动的指针
struct Node* pMove = headNode->next;
printf("姓名\t编号\t数学\t英语\n");
while (pMove)
{
printf("%s\t%s\t%d\t%d\n", pMove->data.name, pMove->data.num, pMove->data.math, pMove->data.english);
pMove = pMove->next;
}
printf("\n");
}
系统设计
C语言基于单链表得学生成绩管理系统-3.jpg (19.44 KB, 下载次数: 0)
-7-30 23:44 上传
student.cpp中实现整个系统
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include "singleList.h"
struct Node* list = createList();
//界面
void menu()
{
printf("----------------------------------\n");
printf("\t\t 0.退出系统\n");
printf("\t\t 1.录入信息\n");
printf("\t\t 2.显示信息\n");
printf("\t\t 3.删除信息\n");
printf("\t\t 4.查找信息\n");
printf("\t\t 5.保存到文件\n");
printf("----------------------------------\n");
}
void menuOfDelete()
{
printf("----------------------------------\n");
printf("\t\t1.依照姓名删除\n");
printf("\t\t2.依照学号删除\n");
printf("----------------------------------\n");
}
void keyDownOfDelete()
{
int choice;
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("输入毛病,无法删除\n");
}
}
//保存到文件
void saveInfoToFile(struct Node* list, char *filePath, char *mode)
{
struct Node* pMove = list->next;
FILE *fp = fopen(filePath, mode);
while (pMove)
{
fprintf(fp, "%s\t%s\t%d\t%d\n", 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)
{
FILE *fp = fopen(filePath, mode);
struct student data;
while (fscanf(fp, "%s\t%s\t%d\t%d\n", data.name, data.num, &data.math, &data.english) != EOF)
{
insertNodeByHead(list, data);
}
fclose(fp);
}
//交互:按键操作+鼠标操作 C语言:按键操作
void keyDown()
{
int choice;
scanf("%d", &choice);
struct student stuInfo;
char temp = ' ';
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\t%s\t%d\t%d\n", 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("未找到相关信息!\n");
}
break;
case 5://5.保存到文件
saveInfoToFile(list,"1.txt", "w");
break;
default:
printf("输入毛病,重新输入\n");
break;
}
}
int main()
{
readInfoFromFile(list, "1.txt", "r");
while (1)
{
menu();
keyDown();
system("pause");
system("cls");
}
return 0;
}
和年夜家说了这么多,其实不是告诉年夜家我的技术有何等何等的牛,而是想告诉年夜家,只要你有决心和意志,要好学C/C++并没那么难。要混口饭吃也不是这么难哦。
更多内容回复查看:
游客,如果您要查看本帖隐藏内容请回复