用語言寫的學生成績管理系統的源代碼。
/* * * * * * * * * * * * xuesheng . c * * * * * * * * * */
/******
頭文件(
。h
)
***********/
#include "stdio.h" /*I/O
功能
*/
#include "stdlib.h" /*
其他說明
*/
#include "string.h" /*
字符串處理功能
*/
#包含“conio . h”/*
屏幕操作功能
*/
#包含“mem . h”/*
記憶操作功能
*/
#包含" ctype.h" /*
字符操作功能
*/
#包含" alloc.h" /*
動態地址分配功能
*/
#定義N 3 /*
定義常數
*/
typedef結構z1 /*
定義數據結構
*/
{
字符編號[11];
char name[15];
int score[N];
浮動總和;
浮動平均值;
int順序;
struct z 1 * next;
}學生;
/*
下面是壹個函數原型。
*/
學生* init();/*
初始化功能
*/
學生* create();/*
創建鏈接列表
*/
學生*刪除(學生* h);/*
刪除記錄
*/
作廢打印(學生* h);/*
顯示所有記錄
*/
void搜索(學生* h);/*
尋求
*/
void save(學生* h);/*
保護
*/
學生* load();/*
在記錄中讀取
*/
void電腦(學生* h);/*
計算總分和平均分
*/
學生*插入(學生* h);/*
插入記錄
*/
void append();/*
附加記錄
*/
void copy();/*
復制文件
*/
學生*排序(學生* h);/*
分類
*/
學生*指數(學生* h);/*
指數
*/
void total(學生* h);/*
分類總計
*/
int menu _ select();/*
菜單功能
*/
/******
主功能啟動
*******/
主()
{
int I;
學生*頭;/*
鏈表定義頭指針
*/
head = init();/*
初始化鏈表
*/
clr SCR();/*
cls
*/
for(;;) /*
無限循環
*/
{
switch(menu_select()) /*
調用主菜單功能,
作為switch語句返回值整數
的條件
*/
{ /*
價值觀不同,
執行不同的功能,
破裂
不能省略
*/
案例0:head = init();打破;/*
執行初始化
*/
case 1:head = create();打破;/*
創建鏈接列表
*/
情況二:head=delete(頭);打破;/*
刪除記錄
*/
案例三:打印(頭);打破;/*
顯示所有記錄
*/
案例四:搜索(頭);打破;/*
查找記錄
*/
案例五:救(頭);打破;/*
保存文件
*/
情況6:head = load();打破;/*
閱讀文件
*/
案例7:計算機(頭);打破;/*
計算總分和平均分
*/
案例8:頭=插入(頭);打破;/*
插入記錄
*/
案例九:copy();打破;/*
復制文件
*/
案例10:head = sort(head);打破;/*
分類
*/
case 11:append();打破;/*
附加記錄
*/
案例12:head=index(頭);打破;/*
指數
*/
案例13:合計(頭);打破;/*
分類總計
*/
案例14:出口(0);/*
如果菜單返回值為
14
程序結束
*/
}
}
}
/*
菜單函數,返回值是整數。
*/
menu_select()
{
char * MENU[]= { ************** * * * *菜單* * * * * * * * * * * * * * ",/*
定義菜單單詞
字符串數組
*/
" 0.初始化列表",/*
初始化
*/
" 1.輸入列表",/*
輸入記錄
*/
" 2.從列表中刪除記錄",/*
從表中刪除記錄
*/
" 3.打印列表",/*
顯示單個鏈表中的所有記錄
*/
" 4.按姓名搜索記錄",/*
按名稱查找記錄
*/
" 5.保存文件",/*
將單鏈表中的記錄保存到壹個文件中。
*/
" 6.加載文件",/*
從文件中讀取記錄
*/
" 7.計算分數",/*
計算所有學生的總分和平均分。
*/
" 8.將記錄插入列表",/*
將記錄插入表中
*/
" 9.將文件復制到新文件",/*
復制文件
*/
" 10.排序以生成新文件",/*
分類
*/
" 11.將記錄附加到文件",/*
將記錄附加到文件
*/
" 12.編號索引",/*
指數
*/
" 13.數字總計",/*
分類總計
*/
" 14.退出" };/*
放棄
*/
char s[3];/*
以字符形式保存選擇號。
*/
int c,I;/*
定義塑性變量
*/
gotoxy(1,25);/*
移動光標
*/
printf("按任意鍵進入菜單......\ n ");/*
按任意鍵進入主菜單。
*/
getch();/*
輸入任意鍵。
*/
clr SCR();/*
清除屏幕
*/
gotoxy(1,1);/*
移動光標
*/
textcolor(黃色);/*
將文本顯示顏色設置為黃色。
*/
textbackground(藍色);/*
將背景顏色設置為藍色。
*/
gotoxy(10,2);/*
移動光標
*/
putch(0xc 9);/*
輸出左上角邊框┏ */
for(I = 1;我& lt44;i++)
putch(0x CD);/*
輸出頂部邊框水平線
*/
putch(0x bb);/*
輸出右上邊框
┓*/
for(I = 3;我& lt20;i++)
{
gotoxy(10,I);putch(0x ba);/*
輸出左垂直線
*/
gotoxy(54,I);putch(0x ba);
} /*
輸出右垂直線
*/
gotoxy(10,20);putch(0x c8);/*
輸出左上角邊框┗ */
for(I = 1;我& lt44;i++)
putch(0x CD);/*
輸出下邊框水平線
*/
putch(0x BC);/*
輸出右下角邊框┛ */
窗口(11,3,53,19);/*
制作壹個窗口來顯示菜單,
根據菜單的數量設置大小。
數數
*/
clr SCR();/*
cls
*/
for(I = 0;我& lt16;i++) /*
輸出主菜單數組
*/
{
gotoxy(10,I+1);
cprintf("%s ",menu[I]);
}
textbackground(黑色);/*
將背景顏色設置為黑色。
*/
窗口(1,1,80,25);/*
恢復原始窗口大小
*/
gotoxy(10,21);/*
移動光標
*/
做{
printf("\n
進入
妳們
choice(0 ~ 14):";/*
在菜單窗口中顯式
提示信息
*/
scanf("%s ",s);/*
輸入選項
*/
c = atoi(s);/*
將輸入字符串轉換成整數。
*/
} while(c & lt;0 | | c >;14);/*
所選項目不存在。
0~14
站間重傳
*/
返回
c;/*
返回選擇,
主程序根據這個數字調用相應的函數。
*/
}
學生*init()
{
返回NULL
}
/*
創建鏈接列表
*/
學生*創建()
{
int I;int s;
STUDENT *h=NULL,* info/*學生
指向結構的指針
*/
for(;;)
{
info=(學生*)malloc(sizeof(學生));/*
申請空間
*/
如果(!信息)/*
如果指針
信息
空的
*/
{
printf(" \ n內存不足");/*
輸出內存溢出
*/
返回NULL/*
返回壹個空指針
*/
}
輸入("輸入號碼:",信息-& gt;否,11);/*
輸入學號,核對壹下。
*/
if(info-& gt;沒有[0]=='@ ')分隔符;/*
如果學號的第壹個字符是
@
然後輸入結束。
*/
輸入("輸入姓名:",信息-& gt;姓名,15);/*
輸入名稱並檢查。
*/
printf("請輸入%d分數\n ",N);/*
提示開始輸入分數
*/
s = 0;/*
計算每個學生的總分,初始值為
0*/
for(I = 0;我& ltn;i++) /*N
課程周期
普通
時間
*/
{
做{
printf("分數%d:",I+1);/*
提示選擇哪些課程?
*/
scanf("%d ",& amp信息-& gt;score[I]);/*
輸入分數
*/
if(info-& gt;score[I]& gt;100 | |信息->;score[I]& lt;0) /*
確保分數在裏面
0~100
在...之間
*/
printf("壞數據,重復輸入\ n ");/*
出錯信息
*/
} while(info-& gt;score[I]& gt;100 | |信息->;score[I]& lt;0);
s = s+info-& gt;得分[I];/*
累積每門課的分數。
*/
}
信息-& gt;sum = s;/*
保存總分
*/
信息-& gt;平均值=(浮點)信噪比;/*
求平均值
*/
信息-& gt;順序= 0;/*
排序前,該值為
0*/
信息-& gt;next = h;/*
將首節點作為新輸入節點的後繼節點。
*/
h = info/*
新的輸入節點是新的頭節點。
*/
}
返回(h);/*
返回磁頭指針
*/
}
/*
輸入壹個字符串並驗證其長度。
*/
輸入(char *提示、char *s、int計數)
{
char p[255];
做{
printf(提示);/*
顯示提示信息
*/
scanf("%s ",p);/*
輸入語符列
*/
if(strlen(p)>count)printf("\n太長!\ n ");/*
檢查長度,超級
及格
數數
值重新輸入
*/
}while(strlen(p)>計數);
strcpy(s,p);/*
將輸入字符串復制到字符串。
s
中間
*/
}
/*
輸出鏈表中的節點信息
*/
作廢打印(學生*h)
{
int I = 0;/*
統計記錄的數量
*/
學生* p;/*
移動指針
*/
clr SCR();/*
cls
*/
p = h;/*
帶有初始值的磁頭指針
*/
printf(" \ n \ n \ n **************** * * * * * * * * * * *學生* * * * * * * * * * * * * * * * "
* * * * * * * * * * * * * \ n ");
printf(" | rec | nO | name | sc 1 | sc2 | sc3 | sum |
ave | order | \ n ");
printf(" |-|-|-|-|-|-|-|-|-
-|-| \ n ");
而(p!=空)
{
i++;
printf("|%3d
| %-10s | %-15s | % 4d | % 4d | % 4d |
%4.2f
|
%4.2f
|
%3d
|\n ",
我,p-& gt;不,p-& gt;姓名,p-& gt;得分[0],p-& gt;得分[1],
p->;分數[2],p-& gt;sum,p->平均值,p-& gt;訂單);
p = p-& gt;接下來;
}
printf(" ******************** * * * * * * * * * * * * * * * *結束* * * * * * * * * * * * * * * * * * * *
* * * * * * * * * * * \ n ");
}
/*
刪除記錄
*/
學生*刪除(學生*h)
{
學生*p,* q;/*p
為了找到要刪除的節點指針,
q
作為它的前身指針
*/
char s[11];/*
存儲學生編號
*/
clr SCR();/*
cls
*/
printf("請刪除否\ n ");/*
顯示提示信息
*/
scanf("%s ",s);/*
輸入要刪除的記錄的學生編號。
*/
自己修改壹下就好了。
呵呵,這是定制的,誰有時間幫妳?這個需要錢,因為浪費別人的時間!