傳說中講課通俗而不庸俗,說話風流而不下流的小編又來了哦,今天的主要內容是:C語言基於單鏈表得學生成績管理系統。首先給你們總結下爲何大家學習C語言會以爲難,尤爲是對於單鏈表這塊,主要緣由得是由於一下兩點:函數
編寫流程不清晰學習
功能設計不清晰設計
基於單鏈表得學生成績管理系統分爲兩個模塊。指針
#includeblog
#include內存
#include字符串
struct studentget
{數學
char name[20];it
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));
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("麼有(沒有)可用信息,沒法刪除 ");
}
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(" ");
}
系統設計
#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++並沒那麼難。要混口飯吃也不是這麼難哦。