C語言基於單鏈表得學生成績管理系統

傳說中講課通俗而不庸俗,說話風流而不下流的小編又來了哦,今天的主要內容是: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++並沒那麼難。要混口飯吃也不是這麼難哦。

相關文章
相關標籤/搜索