C語言單鏈表版學(xué)生信息管理系統(tǒng)
本文實(shí)例為大家分享了C語言學(xué)生信息管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

代碼:
//以單鏈表作為存儲結(jié)構(gòu),設(shè)計和實(shí)現(xiàn)課程成績管理的完整程序。
//程序包括如下功能。
//1.建立學(xué)生成績表,包含學(xué)生的學(xué)號、姓名和成績。
//2.可以顯示所有學(xué)生成績。
//3.可以計算學(xué)生的總數(shù)。
//4.可以按學(xué)號和序號查找學(xué)生。
//5.可以在指定位置插入學(xué)生成績數(shù)據(jù)。
//6.可以刪除指定位置的學(xué)生數(shù)據(jù)。
//7.可以把學(xué)生成績按從高到低的順序排序。
//作者: yinlinqvan
//操作系統(tǒng):Mac OS X
//編譯器:gcc
#include "string.h"
#include "sys/malloc.h"
#include "stdlib.h"
#include "stdio.h"
#include "time.h"
#include "sys/types.h"
#define MAXSIZE 100
typedef struct Student
{
char sname[9];
char sno[5];
int score;
}DataType;
typedef struct
{
DataType data;
struct Node *next;
}LinkList;
LinkList * inputdata();
void display(LinkList * p);
//遍歷鏈表
void displayAll(LinkList * L);
//插入
LinkList * createTailList();//尾插
LinkList * createHeadList();//頭插
//查詢
void getElem(LinkList * L, int i);//按序號
void locateElemBysno(LinkList * L, char ch[]);//按值
void locateElemBysname(LinkList * L, char ch[]);
int lengthList(LinkList * L);
//插入
void insertElem(LinkList * L, int i);//在第i個結(jié)點(diǎn)前進(jìn)行插入
void insertElemBysno(LinkList * L, char ch[5]);//按學(xué)號
void deleteElem(LinkList * L, char ch[]);
//排序
void insertSort(LinkList * L);
int menue();
int main(int argc,char *argv[])
{
LinkList *L;
char sno[5] = {'\0'};
char sname[9] = {'\0'};
int b = 1;
int i = 1;
while (b) {
switch(menue())
{
case 1:
L = createTailList();
//L = createHeadList();
break;
case 2:
//displayAll(L);
printf("\t◎輸入插入哪個位置前:");
scanf("%d", &i);
insertElem(L, i);
//scanf("%s", sno);
//insertElemBysno(L, sno);
break;
case 3:
printf("\t◎輸入待刪除學(xué)生的學(xué)號:");
scanf("%s", sno);
deleteElem(L, sno);
break;
case 4:
printf("╭═══════════════════════════════╮\n");
printf("║\t學(xué)生總數(shù)為:%d\t\t║\n", lengthList(L));
printf("╰═══════════════════════════════╯\n\n");
break;
case 5:
printf("\t◎輸入待查找學(xué)生的學(xué)號:");
scanf("%s", sno);
locateElemBysno(L, sno);
break;
case 6:
printf("\t◎輸入待查學(xué)生的位置:");
scanf("%d", &i);
getElem(L, i);
break;
case 7:
displayAll(L);
break;
case 8:
insertSort(L);
break;
case 9:
i = 2;
while (i)
{
system("clear");
printf("\033[5m");
printf("\033[?25l"); //隱藏光標(biāo)
printf("\n\n\n\n\n\n");
printf("╭═══════════════════════════════╮\n");
printf("║\t正在退出(%d秒)\t\t║\n", i--);
printf("╰═══════════════════════════════╯\n");
sleep(1);
}
printf("\033[0m");
system("clear");
return 0;
break;
default:
i = 2;
while (i)
{
system("clear");
printf("╭═══════════════════════════════╮\n");
printf("║操作數(shù)無效,正在返回主菜單(%d秒)║\n", i--);
printf("╰═══════════════════════════════╯\n");
sleep(1);
}
continue;
}
getchar();
printf("PRESS ENTER TO CONTINUE!");
while (1) {
if ('\n' == getchar())
{
break;
}
}
}
return 0;
}
int menue()
{
system("clear");
//警告音
printf("\033[0m"); //關(guān)閉所有屬性
printf("\033[44;37m"); //47是字背景顏色,33是字體的顏色
printf ("\033[5m"); //閃爍
printf("\n^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
printf("\033[0m"); //關(guān)閉所有屬性
printf("\033[44;37m");
printf("╭═══════════════════════════════╮\n");
printf("║\t學(xué)生成績管理程序\t║\n");
printf("║\t\t\t\t║\n");
printf("║\t<1>創(chuàng)建\t\t\t║\n");
printf("║\t<2>指定位置后插入\t║\n");
printf("║\t<3>按位置刪除\t\t║\n");
printf("║\t<4>求學(xué)生總數(shù)\t\t║\n");
printf("║\t<5>按學(xué)號查找\t\t║\n");
printf("║\t<6>按位置查找\t\t║\n");
printf("║\t<7>顯示所有學(xué)生\t\t║\n");
printf("║\t<8>成績排序\t\t║\n");
printf("║\t<9>退出\t\t\t║\n");
printf("╰═══════════════════════════════╯\n\n");
printf ("\033[5m");
printf("^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^\n\n");
printf("\033[0m"); //關(guān)閉所有屬性
time_t rawtime;
struct tm * timeinfo;
time ( &rawtime );
timeinfo = localtime ( &rawtime );
//printf ( "\t\007%s", asctime (timeinfo) );
printf ("\033[;34m");
printf ("\t[%4d-%02d-%02d %02d:%02d:%02d]\n",
1900+timeinfo->tm_year,
1+timeinfo->tm_mon,
timeinfo->tm_mday,
timeinfo->tm_hour,
timeinfo->tm_min,
timeinfo->tm_sec);
char colorname[3][20] = {{"RED"}, {"BLUE"}, {"YELLLOW"}};
srand(time(&rawtime)); //時間觸發(fā)
//textcolor(colorname[rand()%3]);
//printf("\t[textcolor is %s]\n", colorname[rand()%3]);
//顏色碼和控制碼 我的參考鏈接 http://wenku.baidu.com/view/a38f77ff910ef12d2af9e70b.html
printf("\t◎輸入功能項(xiàng):");
int a = 0;
scanf("%d",&a);
printf("\033[0m");
system("clear");
return a;
}
LinkList * inputdata()
{
LinkList *s = NULL;
char sno[5] = {'\0'};
char sname[9] = {'\0'};
int score = 0;
printf("\tsno\t->");
scanf("%s", sno);
if (sno[0] == '#') {
return s;
}
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s -> data.sno, sno);
printf("\tsname\t->");
scanf("%s", sname);
strcpy(s -> data.sname, sname);
printf("\tscore\t->");
scanf("%d", &score);
s -> data.score = score;
printf("\n");
return s;
}
void display(LinkList * p)
{
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\tsno\t\tsname\t\tscore\t║\n");
printf("║\t%s\t\t%s\t\t%-4d\t║\n", p->data.sno, p->data.sname, p->data.score);
printf("╰═══════════════════════════════════════════════╯\n\n");}
void displayAll(LinkList * L)
{
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\tsno\t\tsname\t\tscore\t║\n");
LinkList * p = L -> next;
while(p)
{
printf("║\t%s\t\t%s\t\t%-4d\t║\n", p->data.sno, p->data.sname, p->data.score);
p = p -> next;
}
printf("╰═══════════════════════════════════════════════╯\n\n");
}
LinkList * createTailList()
{
//鏈表頭結(jié)點(diǎn)
LinkList * L = (LinkList *)malloc(sizeof(LinkList));
//結(jié)點(diǎn)
LinkList * s = NULL;
//尾結(jié)點(diǎn)
LinkList * r = L;
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\t\t尾插法建立\t\t\t║\n");
printf("║\t請輸入學(xué)生信息(當(dāng)學(xué)號為\"#\"時結(jié)束)\t║\n");
printf("║\t\t\t\t\t\t║\n");
printf("║\t學(xué)號sno (不超過4位)\t\t║\n");
printf("║\t姓名sname (不超過4個漢字)\t\t║\n");
printf("║\t成績score (int型)\t\t\t║\n");
printf("╰═══════════════════════════════════════════════╯\n\n");
while (1) {
s = inputdata();
if (!s) {
break;
}
r->next = s;
r = s;
}
r->next = NULL;
return L;
}
LinkList * createHeadList()
{
//鏈表頭結(jié)點(diǎn)
LinkList * L = (LinkList *)malloc(sizeof(LinkList));
//結(jié)點(diǎn)
LinkList * s = NULL;
printf("╭═══════════════════════════════════════════════╮\n");
printf("║\t\t頭插法建立\t\t║\n");
printf("║\t請輸入學(xué)生信息(當(dāng)學(xué)號為\"#\"時結(jié)束)\t║\n");
printf("║\t\t\t\t\t\t║\n");
printf("║\t學(xué)號sno (不超過4位)\t\t║\n");
printf("║\t姓名sname (不超過4個漢字)\t\t║\n");
printf("║\t成績score (int型)\t\t\t║\n");
printf("╰═══════════════════════════════════════════════╯\n\n");
while (1) {
s = inputdata();
if (!s) {
break;
}
s->next = L->next;
L->next = s;
}
return L;
}
void getElem(LinkList * L, int i)
{
LinkList * p = L;
int j = 0;
while (p && j<i) {
p = p->next;
j++;
}
if (!p) {
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
else
{
display(p);
}
}
void locateElemBysno(LinkList * L, char ch[5])
{
LinkList * p = L->next;
while (p && (0 != strcmp(p->data.sno, ch)))
{
p = p -> next;
}
if (!p) {
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
else
{
display(p);
}
}
void locateElemBysname(LinkList * L, char ch[9])
{
LinkList * p = L->next;
while (p && (0 != strcmp(p->data.sname, ch)))
{
p = p -> next;
}
if (!p) {
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
else
{
display(p);
}
}
int lengthList(LinkList * L)
{
LinkList * p = L->next;
int j = 0;
while (p) {
p = p->next;
j ++;
}
return j;
}
void insertElem(LinkList * L, int i)
{
LinkList * s = inputdata();
LinkList * p = L;
int j = 0;
while (p && j<i-1)
{
p = p->next;
j++;
}
if (p && p->next)
{
s->next = p->next;
p->next = s;
}
else
{
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
displayAll(L);
}
void insertElemBysno(LinkList * L, char ch[5])
{
LinkList * p = L;
LinkList * s = NULL;
while (p && (0 != strcmp(p->data.sno, ch)))
{
p = p->next;
}
if (!p) {
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
else
{
s = inputdata();
s->next = p->next;
p->next = s;
}
}
void deleteElem(LinkList * L, char ch[5])
{
LinkList *p, *q;
p = L->next;
q=L;
while (p && (strcmp(p->data.sno, ch) != 0)) {
q = p;
p = p->next;
}
if (!p) {
printf("╭═══════════════════════════════╮\n");
printf("║\tDon't find the student!\t║\n");
printf("╰═══════════════════════════════╯\n\n");
}
else
{
display(p);
q->next = p->next;
free(p);
}
}
void insertSort(LinkList * L)
{
LinkList * L1;
LinkList * p;
LinkList * q;
LinkList * s;
int len;
len = lengthList(L);
L1 = (LinkList *)malloc(sizeof(LinkList));
if (L->next) {
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s->data.sno, L->data.sno);
strcpy(s->data.sname, L->data.sname);
s->data.score = L->data.score;
s->next = NULL;
L1->next = s;
q = L->next;
}
else
{
printf("╭═══════════════════════════════════╮\n");
printf("║\tThe student link list is empty!\n║\n");
printf("╰═══════════════════════════════════╯\n\n");
return;
}
while (q) {
p = L1->next;
while (p &&(p->data.score >= q->data.score))
{
p = p->next;
}
s = (LinkList *)malloc(sizeof(LinkList));
strcpy(s->data.sno, q->data.sno);
strcpy(s->data.sname, q->data.sname);
s->data.score = q->data.score;
if (!p) {
s->next = NULL;
p->next = s;
}
else
{
s->next = p->next;
p->next = s;
}
q = q->next;
}
displayAll(L1);
}
更多學(xué)習(xí)資料請關(guān)注專題《管理系統(tǒng)開發(fā)》。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 學(xué)生信息管理系統(tǒng)C語言版
- C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(單鏈表)
- C語言數(shù)據(jù)結(jié)構(gòu)之學(xué)生信息管理系統(tǒng)課程設(shè)計
- C語言學(xué)生信息管理系統(tǒng)設(shè)計與實(shí)現(xiàn)
- C語言版學(xué)生信息管理系統(tǒng)
- C語言學(xué)生信息管理系統(tǒng)小項(xiàng)目
- C語言數(shù)組實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)設(shè)計
- C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)(文件版)
- C語言使用鏈表實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
- C語言實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)開發(fā)
相關(guān)文章
C++代碼改造為UTF-8編碼問題的總結(jié)(最新推薦)
本文總結(jié)了如何將C++程序代碼改造為UTF-8編碼,包括操作系統(tǒng)、編譯器和終端等各方面的設(shè)置,在實(shí)際操作中,可以通過漸進(jìn)式更新的方式,只在新的代碼項(xiàng)目中使用UTF-8編碼,避免大規(guī)模修改舊代碼,感興趣的朋友一起看看吧2025-02-02
用C語言實(shí)現(xiàn)從文本文件中讀取數(shù)據(jù)后進(jìn)行排序的功能
這是一個十分可靠的程序,這個程序的查錯能力非常強(qiáng)悍。程序包含了文件操作,歸并排序和字符串輸入等多種技術(shù)。對大家學(xué)習(xí)C語言很有幫助,有需要的一起來看看。2016-08-08
Visual Studio 2019 Professional 激活方法詳解
這篇文章主要介紹了Visual Studio 2019 Professional 激活方法,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05
C C++算法題解LeetCode1408數(shù)組中的字符串匹配
這篇文章主要為大家介紹了C C++算法題解LeetCode1408數(shù)組中的字符串匹配示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-10-10
Cocos2d-x UI開發(fā)之CCControlButton控件類實(shí)例
這篇文章主要介紹了Cocos2d-x UI開發(fā)之CCControlButton控件類實(shí)例,本文代碼中包含大量注釋來講解CCControlButton控件類的使用,需要的朋友可以參考下2014-09-09

