本人的C語言學習完后,用所學的知識自己實現(xiàn)了一個學生管理系統(tǒng),新手一個,代碼還有待完善,歡迎大家在評論區(qū)指出錯誤!
一、流程圖
二、函數(shù)的目錄?
三、程序介紹?
1.主要功能:添加學生信息、打印學生信息、查找學生信息、添加學生信息、修改學生信息、計算學生成績、刪除學生信息。
2.實現(xiàn)思路:本系統(tǒng)用的是鏈表(個人感覺鏈表很好用)來實現(xiàn)添加、查找、添加等操作,沒用使用數(shù)據(jù)庫,所有數(shù)據(jù)都放在了堆區(qū)。
3.文件介紹:本系統(tǒng)中使用了三個文件 main.c、Func.c、Func.h。
四、系統(tǒng)原碼
main.c介紹
main函數(shù)這里只調(diào)用了login();這個函數(shù)
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Func.h"
int main()
{
//賬號登陸
login();
system("pause");
return 0;
}
Func.h介紹
主要就是函數(shù)還有結(jié)構(gòu)體的聲明
#pragma once
#define MAX 64 //將數(shù)組大小統(tǒng)一
typedef struct user //管理員的id 和 密碼
{
char id[MAX];
char password[MAX];
}User;
typedef struct student
{
char name[MAX]; //學生姓名
char sex[MAX]; //學生性別
char num[MAX]; //學生學號
int Chinese; //語文成績
int Mathematics; //數(shù)學成績
int English; //英語成績
int Computer; //計算機成績
}STU;
//學生鏈表
struct stu_LinkList
{
//數(shù)據(jù)域
STU student;
//指針域
struct stu_LinkList* next;
};
//主函數(shù)聲明
//登陸函數(shù)
extern void login();
//打印主界面
extern void print_manu();
//添加學生信息
extern struct stu_LinkList* input_information();
//打印學生信息
extern void print_information();
//查找學生信息
extern void search_information();
//添加學生信息
extern void increase_information();
//修改學生信息
extern void modify_information();
//計算學生成績
extern void calc();
//刪除學生信息
extern void del_information();
//退出程序
extern void exit_project();
/
//自定義函數(shù)聲明
//表頭
extern void print_table();
//總成績表頭
extern void print_table_add();
//平均數(shù)表頭
extern void print_table_ave();
/
//查詢子函數(shù)聲明
//姓名查詢
extern void search_by_name();
//性別查詢
extern void search_by_sex();
//學號查詢
extern void search_by_num();
//
//計算子函數(shù)聲明
//計算總成績
extern void calc_sum();
//計算平均數(shù)
extern void calc_ave();
//
//刪除子函數(shù)聲明
//刪除單個學生
extern void del_priv_stu();
//刪除所有學生
extern void del_all_stu();
Func.c介紹
這里主要是函數(shù)效果的實現(xiàn)
#define _CRT_SECURE_NO_WARNINGS 1
#pragma warning(disable : 6031) //消除c6031警告,C6031返回值被忽略:“scanf”解決辦法
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Func.h"
//學生鏈表頭節(jié)點(全局變量)
struct stu_LinkList* Header = NULL;
//登陸函數(shù)
void login()
{
//初始化管理員的id和密碼
User user[2] = { { "Leo", "123456" }, {"bob", "123456"} };
char password[MAX] = {0}; //密碼
char id[MAX] = {0}; //用戶名
int num = 1; //記錄登錄次數(shù)
int chance = 3; //機會次數(shù)
while (1)
{
int isTrue = 0; //用來判斷是否登錄成功
printf("---------- 請輸入用戶名 ----------\n");
scanf("%s", id);
getchar();
printf("---------- 請輸入密碼 ----------\n");
scanf("%s", password);
getchar();
if (num <= 3)
{
for (int i = 0; i < sizeof(user) / sizeof(user[0]); i++)
{
if (strcmp(user[i].id, id) == 0 && strcmp(user[i].password, password) == 0)
{
printf("登陸成功!\n");
//打印界面
print_manu();
isTrue = 1;
}
}
if (isTrue != 1)
{
num++;
printf("輸入錯誤,您還有%d次機會\n", --chance);
if (chance == 0)
{
printf("三次均輸入失敗,退出程序\n");
break;
}
}
else
{
break;
}
}
printf("按回車重新輸入\n");
getchar();
system("cls");
}
}
//打印主界面
void print_manu()
{
system("cls");
int num = 0; //選擇要執(zhí)行的序號
printf("**********************************************\n");
printf("***********歡迎使用高校學生管理系統(tǒng)***********\n");
printf("**********************************************\n");
printf("\t\t1.輸入學生信息\t\t\n");
printf("\t\t2.查找學生信息\t\t\n");
printf("\t\t3.打印學生信息\t\t\n");
printf("\t\t4.添加學生信息\t\t\n");
printf("\t\t5.修改學生信息\t\t\n");
printf("\t\t6.計算學生成績\t\t\n");
printf("\t\t7.刪除學生信息\t\t\n");
printf("\t\t8.退出系統(tǒng)\t\t\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("請輸入您要執(zhí)行的操作序號:");
scanf("%d", &num);
getchar();
switch (num)
{
case 1:
//添加學生信息
Header = input_information();
print_manu();
break;
case 2:
//查找學生信息
search_information();
break;
case 3:
//打印學生信息
print_information(Header);
break;
case 4:
//添加學生信息
increase_information();
break;
case 5:
//修改學生信息
modify_information();
break;
case 6:
//計算學生成績
calc();
break;
case 7:
//刪除學生信息
del_information();
break;
case 8:
//退出系統(tǒng)
exit_project();
break;
default:
printf("對不起,沒有該操作,按回車可以重新選擇\n");
getchar();
print_manu();
break;
}
}
//輸入學生信息
struct stu_LinkList* input_information()
{
char isAgain; //用來判斷是否繼續(xù)輸入
//創(chuàng)建一個頭節(jié)點
struct stu_LinkList* pHeader = (struct stu_LinkList*)malloc(sizeof(struct stu_LinkList));
if (pHeader == NULL)
{
printf("抱歉,創(chuàng)建失敗\n");
return;
}
//初始化頭節(jié)點
pHeader->next = NULL;
memset(&pHeader->student, 0, sizeof(STU));
//創(chuàng)建一個尾節(jié)點指針,用來記錄尾節(jié)點的位置,方便插尾
struct stu_LinkList* pTail = pHeader;
//設置一個學生結(jié)構(gòu)體來接收輸入的值
STU tmp;
memset(&tmp, 0, sizeof(STU));
again:
system("cls");
//輸入學生信息
printf("輸入學生姓名:\n");
scanf("%s", tmp.name);
getchar();
printf("輸入學生性別:\n");
scanf("%s", tmp.sex);
getchar();
printf("輸入學生學號:\n");
scanf("%s", tmp.num);
getchar();
printf("輸入學生語文成績:\n");
scanf("%d", &tmp.Chinese);
getchar();
printf("輸入學生數(shù)學成績:\n");
scanf("%d", &tmp.Mathematics);
getchar();
printf("輸入學生英語成績:\n");
scanf("%d", &tmp.English);
getchar();
printf("輸入學生計算機成績:\n");
scanf("%d", &tmp.Computer);
getchar();
//創(chuàng)建一個新的學生節(jié)點
struct stu_LinkList* stu_Node = (struct stu_LinkList*)malloc(sizeof(struct stu_LinkList));
stu_Node->student = tmp;
stu_Node->next = NULL;
//建立關系
pTail->next = stu_Node;
pTail = stu_Node;
//是否繼續(xù)添加學生信息
printf("繼續(xù)添加學生信息請按Y\t返回主頁面請按N\n");
scanf("%c", &isAgain);
if (isAgain == 'Y')
{
goto again;
}
else if(isAgain == 'N')
{
return pHeader;
}
}
//表頭
void print_table()
{
system("cls");
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
printf("| 姓名 | 性別 | 學號 | 語文 | 數(shù)學 | 英語 | 計算機 |\n");
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
}
//打印學生信息
void print_information()
{
system("cls");
int isReturn; //是否返回
//判斷系統(tǒng)里是否有學生信息(沒有輸入過信息)
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
}
//判斷已經(jīng)進行過信息的輸入,但是又將全部數(shù)據(jù)刪除的情況
if (Header->next == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
}
print_table();
struct stu_LinkList* pCurrent = Header->next;
while (pCurrent != NULL)
{
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer);
pCurrent = pCurrent->next;
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
}
printf("返回上一級請輸入 1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
}
//查找學生信息
void search_information()
{
char isAgain;
int num;
system("cls");
printf("**********************************************\n");
printf("**********************************************\n");
printf("\t\t1.按姓名查詢\t\t\n");
printf("\t\t2.按性別查詢\t\t\n");
printf("\t\t3.按學號查詢\t\t\n");
printf("\t\t4.返回主界面\t\t\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("請輸入您要執(zhí)行的操作:");
scanf("%d", &num);
getchar();
if (num == 1)
{
//姓名查詢
search_by_name();
}
else if (num == 2)
{
//性別查詢
search_by_sex();
}
else if (num == 3)
{
//學號查詢
search_by_num();
}
else if (num == 4)
{
print_manu();
}
else
{
printf("抱歉,沒有該選項\n");
printf("重新選擇請按 Y,返回上一級請按 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
search_information();
}
else if (isAgain == 'N')
{
print_manu();
}
}
}
//姓名查詢
void search_by_name()
{
system("cls");
int isReturn = 0; //是否返回
int isLive = 0; //該學生是否存在
char name[MAX];
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按1\t返回上一級請按2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
search_information();
}
}
printf("請輸入您要查詢的姓名:\n");
scanf("%s", name);
getchar();
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
print_table();
while (pCurrent != NULL)
{
//判斷時候有該姓名的學生
if (strcmp(name, pCurrent->student.name) == 0)
{
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer);
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
isLive++;
}
pCurrent = pCurrent->next;
}
if (isLive == 0)
{
system("cls");
printf("抱歉,并未找到該學生\n");
}
//結(jié)束返回
printf("重新查找請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
search_by_name();
}
else if (isReturn == 2)
{
search_information();
}
}
//按照性別查詢
void search_by_sex()
{
system("cls");
int isReturn = 0; //是否返回
int isLive = 0; //該學生是否存在
char sex[MAX];
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按1\t返回上一級請按2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
search_information();
}
}
printf("請輸入您要查詢的性別:\n");
scanf("%s", sex);
getchar();
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
print_table();//打印表頭
while (pCurrent != NULL)
{
//判斷時候有該性別的學生
if (strcmp(sex, pCurrent->student.sex) == 0)
{
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer);
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
isLive++;
}
pCurrent = pCurrent->next;
}
if (isLive == 0)
{
system("cls");
printf("抱歉,并未找到該學生\n");
}
//結(jié)束返回
printf("重新查找請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
search_by_sex();
}
else if (isReturn == 2)
{
search_information();
}
}
//按學號查詢
void search_by_num()
{
system("cls");
int isReturn = 0; //是否返回
int isLive = 0; //該學生是否存在
char num[MAX];
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按1\t返回上一級請按2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
search_information();
}
}
printf("請輸入您要查詢的學號:\n");
scanf("%s", num);
getchar();
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
print_table();
while (pCurrent != NULL)
{
//判斷時候有該性別的學生
if (strcmp(num, pCurrent->student.num) == 0)
{
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer);
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
isLive++;
}
pCurrent = pCurrent->next;
}
if (isLive == 0)
{
system("cls");
printf("抱歉,并未找到該學生\n");
}
//結(jié)束返回
printf("重新查找請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
search_by_num();
}
else if (isReturn == 2)
{
search_information();
}
}
//添加學生信息
void increase_information()
{
system("cls");
int isReturn = 0; //是否返回
char isAgain; //用來判斷是否繼續(xù)輸入
if (Header == NULL)
{
printf("請先輸入學生信息!\n");
printf("返回主頁面請按1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
}
//創(chuàng)建一個尾節(jié)點指針,用來記錄尾節(jié)點的位置,方便插尾
struct stu_LinkList* pTail = Header;
//輸入要添加的學生信息
STU tmp;
memset(&tmp, 0, sizeof(STU));
again:
system("cls");
//輸入學生信息
printf("輸入學生姓名:\n");
scanf("%s", tmp.name);
getchar();
printf("輸入學生性別:\n");
scanf("%s", tmp.sex);
getchar();
printf("輸入學生學號:\n");
scanf("%s", tmp.num);
getchar();
printf("輸入學生語文成績:\n");
scanf("%d", &tmp.Chinese);
getchar();
printf("輸入學生數(shù)學成績:\n");
scanf("%d", &tmp.Mathematics);
getchar();
printf("輸入學生英語成績:\n");
scanf("%d", &tmp.English);
getchar();
printf("輸入學生計算機成績:\n");
scanf("%d", &tmp.Computer);
getchar();
//進行信息比對,如果有重復信息輸入,將會提示
struct stu_LinkList* pCurrent = Header->next;
while (pCurrent != NULL)
{
if (strcmp(tmp.name, pCurrent->student.name) == 0 && strcmp(tmp.sex, pCurrent->student.sex) == 0 && strcmp(tmp.num, pCurrent->student.num) == 0)
{
printf("抱歉,系統(tǒng)已有該同學信息\n");
printf("重新輸入請按 Y\t返回主界面請按 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
increase_information();
}
else if (isAgain == 'N')
{
print_manu();
}
}
pCurrent = pCurrent->next;
}
//遍歷鏈表找到尾節(jié)點
while (pTail->next != NULL)
{
pTail = pTail->next;
}
//創(chuàng)建一個新的學生節(jié)點
struct stu_LinkList* stu_Node = (struct stu_LinkList*)malloc(sizeof(struct stu_LinkList));
stu_Node->student = tmp;
stu_Node->next = NULL;
//建立關系
pTail->next = stu_Node;
pTail = stu_Node;
//是否繼續(xù)添加學生信息
printf("繼續(xù)添加學生信息請按 Y,返回主界面請按 N\n");
scanf("%c", &isAgain);
if (isAgain == 'Y')
{
goto again;
}
else if (isAgain == 'N')
{
print_manu();
}
}
//修改學生信息
void modify_information()
{
system("cls");
char isAgain; //用來判斷是否繼續(xù)輸入
int isReturn = 0; //是否返回
//判斷系統(tǒng)里是否有學生信息
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
}
//輸入要修改的學生信息
STU tmp;
again:
system("cls");
printf("請輸入你要查找的學生信息\n");
printf("輸入學生姓名:\n");
scanf("%s", tmp.name);
getchar();
printf("輸入學生性別:\n");
scanf("%s", tmp.sex);
getchar();
printf("輸入學生學號:\n");
scanf("%s", tmp.num);
getchar();
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
//該信息的位置
struct stu_LinkList* information_pos = NULL;
while (pCurrent != NULL)
{
if (strcmp(tmp.name, pCurrent->student.name) == 0 && strcmp(tmp.sex, pCurrent->student.sex) == 0 && strcmp(tmp.num, pCurrent->student.num) == 0)
{
printf("找到該同學信息\n");
printf("打印學生信息Y\t不打印N\n");
scanf("%c", &isAgain);
if (isAgain == 'Y')
{
print_table();
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer);
printf("+--------+--------+--------+--------+--------+--------+----------+\n");
}
else if (isAgain == 'N')
{
system("cls");
}
//記錄信息位置
information_pos = pCurrent;
}
pCurrent = pCurrent->next;
}
if (information_pos == NULL)
{
system("cls");
printf("未找到該同學信息\n");
//是否繼續(xù)修改學生信息
printf("繼續(xù)修改學生信息Y\t返回主界面N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
goto again;
}
else if (isAgain == 'N')
{
print_manu();
}
}
printf("請修改學生信息\n");
printf("輸入學生姓名:\n");
scanf("%s", tmp.name);
getchar();
printf("輸入學生性別:\n");
scanf("%s", tmp.sex);
getchar();
printf("輸入學生學號:\n");
scanf("%s", tmp.num);
getchar();
printf("輸入學生語文成績:\n");
scanf("%d", &tmp.Chinese);
getchar();
printf("輸入學生數(shù)學成績:\n");
scanf("%d", &tmp.Mathematics);
getchar();
printf("輸入學生英語成績:\n");
scanf("%d", &tmp.English);
getchar();
printf("輸入學生計算機成績:\n");
scanf("%d", &tmp.Computer);
getchar();
//修改學生信息
information_pos->student = tmp;
printf("修改成功!\n");
printf("繼續(xù)修改學生信息Y\t返回主界面N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
goto again;
}
else if (isAgain == 'N')
{
print_manu();
}
}
//總成績表頭
void print_table_add()
{
system("cls");
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
printf("| 姓名 | 性別 | 學號 | 語文 | 數(shù)學 | 英語 | 計算機 | 總成績 |\n");
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
}
//平均數(shù)表頭
void print_table_ave()
{
system("cls");
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
printf("| 姓名 | 性別 | 學號 | 語文 | 數(shù)學 | 英語 | 計算機 | 平均數(shù) |\n");
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
}
//計算學生成績
void calc()
{
char isAgain;//是否繼續(xù)
int num;
system("cls");
printf("**********************************************\n");
printf("**********************************************\n");
printf("\t\t1.計算總成績\t\t\n");
printf("\t\t2.計算平均數(shù)\t\t\n");
printf("\t\t3.返回主界面\t\t\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("請輸入您要執(zhí)行的操作:");
scanf("%d", &num);
getchar();
if (num == 1)
{
//計算總成績
calc_sum();
}
else if (num == 2)
{
//計算平均數(shù)
calc_ave();
}
else if (num == 3)
{
print_manu();
}
else
{
printf("抱歉,沒有該選項\n");
printf("重新選擇請按 Y,返回主界面請按 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
calc();
}
else if (isAgain == 'N')
{
print_manu();
}
}
}
//計算總成績
void calc_sum()
{
system("cls");
int sum = 0;//總成績變量
int isReturn = 0; //是否返回
//判斷系統(tǒng)里是否有學生信息
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
calc();
}
}
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
print_table_add();
while (pCurrent != NULL)
{
sum = pCurrent->student.Chinese + pCurrent->student.Mathematics + pCurrent->student.English + pCurrent->student.Computer;
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d | %5d |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer, sum);
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
pCurrent = pCurrent->next;
}
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
calc();
}
}
//計算平均數(shù)
void calc_ave()
{
system("cls");
float ave = 0;//平均數(shù)變量
int isReturn = 0; //是否返回
//判斷系統(tǒng)里是否有學生信息
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
calc();
}
}
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
print_table_ave();
while (pCurrent != NULL)
{
ave = ((float)(pCurrent->student.Chinese + pCurrent->student.Mathematics + pCurrent->student.English + pCurrent->student.Computer)) * (float)0.25;
printf("|%5s |%5s |%5s |%5d |%5d |%5d |%5d |%5.2lf |\n", pCurrent->student.name, pCurrent->student.sex, pCurrent->student.num,
pCurrent->student.Chinese, pCurrent->student.Mathematics,
pCurrent->student.English, pCurrent->student.Computer, ave);
printf("+--------+--------+--------+--------+--------+--------+----------+----------+\n");
pCurrent = pCurrent->next;
}
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
calc();
}
}
//刪除學生信息
void del_information()
{
char isAgain;//是否繼續(xù)
int num;
system("cls");
printf("**********************************************\n");
printf("**********************************************\n");
printf("\t\t1.刪除單個學生\t\t\n");
printf("\t\t2.刪除全部學生\t\t\n");
printf("\t\t3.返回主界面\t\t\n");
printf("**********************************************\n");
printf("**********************************************\n");
printf("請輸入您要執(zhí)行的操作:");
scanf("%d", &num);
getchar();
if (num == 1)
{
//刪除單個學生
del_priv_stu();
}
else if (num == 2)
{
//刪除所有學生
del_all_stu();
}
else if (num == 3)
{
print_manu();
}
else
{
printf("抱歉,沒有該選項\n");
printf("重新選擇請按 Y,返回主界面請按 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
del_information();
}
else if (isAgain == 'N')
{
print_manu();
}
}
}
//刪除單個學生
void del_priv_stu()
{
int isReturn = 0; //是否返回
int isExist = 0;//判斷信息是否存在
char isAgain = 0;//是否繼續(xù)刪除
//判斷系統(tǒng)里是否有學生信息
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
del_information();
}
}
//輸入要修改的學生信息
STU tmp;
system("cls");
printf("請輸入你要刪除的學生信息\n");
printf("輸入學生姓名:\n");
scanf("%s", tmp.name);
getchar();
printf("輸入學生性別:\n");
scanf("%s", tmp.sex);
getchar();
printf("輸入學生學號:\n");
scanf("%s", tmp.num);
getchar();
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
//記錄上一個節(jié)點的位置
struct stu_LinkList* pPrev = Header;
while (pCurrent != NULL)
{
if (strcmp(tmp.name, pCurrent->student.name) == 0 && strcmp(tmp.sex, pCurrent->student.sex) == 0 && strcmp(tmp.num, pCurrent->student.num) == 0)
{
pCurrent = pCurrent->next;
free(pPrev->next);
pPrev->next = NULL;
//建立關系
pPrev->next = pCurrent;
isExist++;
break;
}
pPrev = pCurrent;
pCurrent = pCurrent->next;
}
if (isExist == 0)
{
system("cls");
printf("未找到該同學信息\n");
//是否繼續(xù)刪除學生信息
printf("繼續(xù)刪除學生信息 Y\t返回上一級 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
del_priv_stu();
}
else if (isAgain == 'N')
{
del_information();
}
}
if (isExist == 1)
{
system("cls");
printf("刪除成功\n");
printf("繼續(xù)刪除學生信息 Y\t返回上一級 N\n");
scanf("%c", &isAgain);
getchar();
if (isAgain == 'Y')
{
del_priv_stu();
}
else if (isAgain == 'N')
{
del_information();
}
}
}
//刪除所有學生
void del_all_stu()
{
system("cls");
int isReturn = 0; //是否返回
//判斷系統(tǒng)里是否有學生信息
if (Header == NULL)
{
printf("系統(tǒng)還沒有學生信息!\n");
printf("返回主頁面請按 1\t返回上一級請按 2\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
print_manu();
}
else if (isReturn == 2)
{
del_information();
}
}
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
//記錄下一個節(jié)點
struct stu_LinkList* next_Node = NULL;
while (pCurrent != NULL)
{
next_Node = pCurrent->next;
free(pCurrent);
pCurrent = NULL;
pCurrent = next_Node;
}
Header->next = NULL;
printf("刪除成功\n");
printf("返回上一級請按 1\n");
scanf("%d", &isReturn);
getchar();
if (isReturn == 1)
{
del_information();
}
}
//退出程序
void exit_project()
{
system("cls");
if (Header == NULL)
{
printf("感謝您的使用,已退出!\n");
exit(0);
}
else if (Header->next == NULL)
{
//釋放頭節(jié)點
free(Header);
Header = NULL;
printf("感謝您的使用,已退出!\n");
exit(0);
}
else
{
//進行遍歷
struct stu_LinkList* pCurrent = Header->next;
//記錄下一個節(jié)點
struct stu_LinkList* next_Node = NULL;
while (pCurrent != NULL)
{
next_Node = pCurrent->next;
free(pCurrent);
pCurrent = NULL;
pCurrent = next_Node;
}
Header->next = NULL;
//釋放頭節(jié)點
free(Header);
Header = NULL;
printf("感謝您的使用,已退出!\n");
exit(0);
}
}
五、總結(jié)文章來源:http://www.zghlxwxcb.cn/news/detail-526744.html
到這里這個學生管理系統(tǒng)就完成啦!這個當作自己的一個C語言結(jié)課作業(yè),在寫的過程中有一些邏輯參考了學生信息管理系統(tǒng)這篇文章,希望以上內(nèi)容可以幫助到大家,如果有錯誤歡迎大家指出。文章來源地址http://www.zghlxwxcb.cn/news/detail-526744.html
到了這里,關于C語言實現(xiàn)學生信息管理系統(tǒng)(附原碼)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!