當前位置:編程學習大全網 - 編程語言 - 編程主幹課程

編程主幹課程

/*

* * *這是我寫的。可以參考壹下。我的編譯器用的是devC++。可以說我的代碼效率很高。同時界面精致完美,深受老師好評。只是數據庫沒用。唯壹遺憾的是在vc下運行編譯器可能會出錯,主要是兩個編譯器為循環聲明變量,限制不壹致。具體細節可以改,只是程序。我也很忙。我沒時間看這個。抱歉。

*

/

# include & ltstdio.h & gt

# include & ltstdlib.h & gt

# include & ltstring.h & gt

# include & ltconio.h & gt

int shoud save = 0;/* */

結構學生

{

字符編號[10];/*學生ID */

char name[20];

國際貿易;

國際貿易;

int egrade

int totle

int ave

};

typedef結構節點

{

構造學生數據;

結構節點* next

}節點,*鏈接;

無效菜單()

{

printf(" \ t \ t \ t \ t學生成績管理系統\ n \ t \ t-n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *);

printf(" \ t 1輸入學生數據\ t \ t \ t \ t2刪除學生數據\ n ");

printf(" \ t 3查詢學生信息\ t \ t \ t \修改學生信息\ n ");

Printf("\t5顯示學生數據\t\t\t\t\t6統計學生成績\ n ");

Printf("\t7排序學生成績\ t \ t \ t \ t8保存學生數據\ n ");

Printf("\t9獲取幫助信息\ t \ t \ t \ t退出系統\ n ");

printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \ n ");

}

void printstart()

{

printf("-\ n ");

}

無效錯誤()

{

printf(" \ n = = = = = & gt;提示:輸入錯誤!\ n ");

}

void Nofind()

{

printf(" \ n = = = = = & gt;提示:找不到學生!\ n ");

}

Void printc() /*該函數用於輸出中文標題*/

{

Printf("學生姓名,英語成績,數學成績,C語言成績,平均分\ n ");

}

Void printe(Node *p)/*該函數用於輸出中文標題下的具體內容*/

{

printf(" \ t % s \ t % s \ t % d \ t % d \ t % d \ t % d \ t % d \ t % d \ n ",p-& gt;data.num,p-& gt;data.name,p-& gt;data.egrade,p-& gt;data.mgrade,p-& gt;data.cgrade,p-& gt;data.totle,p-& gt;data . ave);

}//少打印名字

Node * locate (link L,char find mess [],char namernum [])/*該函數用於定位鏈表中符合條件的聯系人,並返回指針*/

{

node * r;

If (strcmp (namernum," num") = = 0)/*按學號查詢*/

{

r = l-& gt;接下來;

while(r)

{

if(strcmp(r-& gt;data.num,findmess)==0)

return r;

r = r-& gt;接下來;

}

}

Elseif (strcmp (namernum," name") = = 0)/*按名稱查詢*/

{

r = l-& gt;接下來;

while(r)

{

if(strcmp(r-& gt;data.name,findmess)==0)

return r;

r = r-& gt;接下來;

}

}

返回0;

}

Void Add(Link L) /*大寫增加學生的頭部指針,便於區分*/

{

系統(“cls”);//清除屏幕

節點*p,*r,* s;

字符編號[10];

while(1)

{

r = L;

s = L-& gt;接下來;

while(r->;下壹個!=空)

r = r-& gt;接下來;

Printf("請輸入妳的學號(用' 0 ':)返回上壹個菜單);

scanf("%s ",數字);

getchar();

if(strcmp(num," 0")==0)

打破;

while(s)

{

if(strcmp(s-& gt;data.num,num)= 0)

{

系統(“cls”);

printf(" = = = = = = & gt;提示:學號為“%s”的學生已經存在,請重新添加!\n ",編號);//更改分行符

printstart();

printc();

印刷品;

printstart();

printf(" \ n ");

Printf("請輸入妳的學號(用' 0 '):")返回上壹菜單;

scanf("%s ",數字);

getchar();

s = L-& gt;接下來;//返回再次搜索,新輸入是否已經存在。

}

其他

s = s-& gt;接下來;//如果沒有匹配,繼續找。。。

}

p=(節點*)malloc(sizeof(節點));

strcpy(p-& gt;data.num,num);

Printf("請輸入您的姓名:");

scanf("%s ",p-& gt;data . name);

getchar();//程序暫停輸入。

Printf("請輸入妳的C語言成績:");

scanf("%d ",& ampp->;data . cgrade);

getchar();

Printf("請輸入妳的數學成績:");

scanf("%d ",& ampp->;data . m grade);

getchar();

Printf("請輸入妳的英語成績:");

scanf("%d ",& ampp->;data . e grade);

getchar();

p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;

p->;data . ave = p-& gt;data . totle/3;/*信息輸入已經完成*/

p->;next = NULL

r-& gt;next = p;

//r = p;這裏是多余的

shoudsave = 1;

}

Printf("按任意鍵返回!");

getch();

}

Void Qur(Link l) /*查詢學生*/

{

int sel

char find mess[20];

node * p;

char選擇;

while(1){

系統(“cls”);

如果(!l-& gt;下壹個)

{

printf(" \ n = = = = = & gt;提示:沒有可查詢的信息!\ n ");

//不返回;

Printf("請先加壹個數據,親愛的。。。\ n ");

打破;

}

printf(" \ n = = = = = & gt;1按學號搜索\ n = = = = > 2按姓名搜索\ n ");

scanf("%d ",& ampsel);

If(sel==1)/*學生ID */

{

Printf("請輸入要查找的學號:");

scanf("%s ",find mess);

p=Locate(l,findmess," num ");

如果(p)

{

printf(" \ t \ t \ t \ t \ t findings \ n ");

printstart();

printc();

printe(p);

printstart();

}

其他

nofind();

}

Else if(sel==2) /* name */

{

Printf("請輸入要查找的名稱:");

scanf("%s ",find mess);

p=Locate(l,findmess," name ");

如果(p)

{

printf(" \ t \ t \ t \ t \ t findings \ n ");

printstart();

printc();

printe(p);

printstart();

}

其他

nofind();

}

其他

錯誤();

printf(" \ n是否繼續查詢(y/n):");//選擇是否繼續查詢。

getchar();

scanf("%c ",& amp選擇);

if(choice=='n'){

Printf("按任意鍵返回!親愛的”);

getch();

打破;}

}

}

Void Del(Link l) /* Delete */

{

int sel

節點*p,* r;

char選擇;

char find mess[20];

while(1){

系統(“cls”);

如果(!l-& gt;下壹個)

{

printf(" \ n = = = = = & gt;提示:沒有數據可以刪除!\ n ");

Printf("回去再選,親愛的。。。");//返回;

打破;

}

printf(" \ n = = = = = & gt;1按學號刪除\ n = = = = > 2按姓名刪除\ n ");

scanf("%d ",& ampsel);

if(sel==1)

{

Printf("請輸入要刪除的學號:");

scanf("%s ",find mess);

p=Locate(l,findmess," num ");

如果(p)

{

r = l;

while(r->;下壹個!=p)

r = r-& gt;接下來;

r-& gt;next = p-& gt;接下來;

免費(p);

printf(" \ n = = = = = & gt;提示:該學生已被成功刪除!\ n ");

shoudsave = 1;

printf(" \ n是否要繼續刪除(y/n):");//選擇是否繼續刪除。

getchar();

scanf("%c ",& amp選擇);

if(choice=='n ')

打破;

}

否則{

nofind();

打破;

}

}

else if(sel==2)

{

Printf("請輸入要刪除的名稱:");

scanf("%s ",find mess);

p=Locate(l,findmess," name ");

如果(p)

{

r = l;

while(r-& gt;下壹個!=p)

r = r-& gt;接下來;

r-& gt;next = p-& gt;接下來;

免費(p);

printf(" \ n = = = = = & gt;提示:該學生已被成功刪除!\ n ");

shoudsave = 1;

printf(" \ n是否要繼續刪除(y/n):");//選擇是否繼續刪除。

getchar();

scanf("%c ",& amp選擇);

if(choice=='n ')

打破;

}

否則{

nofind();

打破;

}

}

其他

錯誤();

系統(“暫停”);

}

Printf("按任意鍵返回,親愛的");

getch();

}

無效修改(鏈接l)

{

系統(“cls”);

節點*p,* s;

s = l-& gt;接下來;

char find mess[20];

int key = 1;

while(1){

如果(!l-& gt;下壹個)

{

printf(" \ n = = = = = & gt;提示:沒有數據可以修改!\ n ");

打破;

}

while(鍵){

系統(“cls”);

getchar();

Printf("請輸入要修改的學號:");

scanf("%s ",find mess);

//添加壹個函數,檢查學號是否存在。

while(s)

{

if(strcmp(s-& gt;data.num,findmess)==0)

{

系統(“cls”);

printf(" = = = = = = & gt;提示:已經找到學號為“%s”的學生,請修改!\n ",find mess);

printstart();

printc();

印刷品;

printstart();

printf(" \ n ");

key = 0;//跳出大循環

打破;//跳出內部循環

}

其他

s = s-& gt;接下來;//如果沒有匹配,繼續找。。。

}

//如果掃描後還是找不到,會提示重新輸入。

如果(!s)

printf(" \ n該學號不存在,請檢查是否輸入正確!\ n ");

系統(“暫停”);

}

p=Locate(l,findmess," num ");

如果(p)

{

// printf("請輸入您新的C語言分數(原來是%d):",p-& gt;data . cgrade);

// scanf("%d ",& ampp->;data . cgrade);

Printf("請輸入您的新名字:");

scanf("%s ",p-& gt;data . name);

getchar();//程序暫停輸入。

Printf("請輸入新的C語言分數:");

scanf("%d ",& ampp->;data . cgrade);

getchar();

Printf("請輸入新的數學分數:");

scanf("%d ",& ampp->;data . m grade);

getchar();

Printf("請輸入新的英文分數:");

scanf("%d ",& ampp->;data . e grade);

getchar();

p->;data . totle = p-& gt;data . e grade+p-& gt;data . c grade+p-& gt;data . m grade;//改版後,總分和平均分都會有變化。

p->;data . ave = p-& gt;data . totle/3;/*信息輸入已經完成*/

printf(" \ n = = = = = & gt;提示:數據已修改成功!\ n ");

shoudsave = 1;

}

其他

nofind();

打破;

}

Printf("請按任意鍵繼續。。。");

getch();

}

無效顯示(鏈接l)

{

系統(“cls”);

int count = 0;

node * p;

p = l-& gt;接下來;

while(1){

如果(!p)

{

printf(" \ n = = = = = & gt;提示:沒有數據可顯示!\ n ");

//回復毛,返回;

打破;

}

printf(" \ t \ t \ t \ t顯示結果\ n ");

printstart();

printc();

printf(" \ n ");

while(p)

{

printe(p);

p = p-& gt;接下來;

}

printstart();

printf(" \ n ");

打破;//已修改

}

Printf("按任意鍵返回!");

getch();

}

//排序排序函數

Int SortData(Link L)//用最簡單的冒泡排序法按總分排序。

{

結構學生溫度;

node * r = L-& gt;接下來,*p1,* p2

int count=0,I,j;

while(r)

{ r = r-& gt;接下來;

count++;

}//計算鏈表的長度

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data.totle & ltr-& gt;下壹個-& gt;data.totle)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}

Printf("排序成功!請返回主界面查詢!”);

getch();

返回0;

}

無效統計數據(鏈接L)

{ system(" cls ");

結構學生溫度;

node * r = L-& gt;接下來,*p1,* p2

int count=0,I,j;

while(r)

{ r = r-& gt;接下來;

count++;

}//計算鏈表的長度

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data.ave & ltr-& gt;下壹個-& gt;data.ave)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}

Printf("\n最高平均分數是:\t%s,%d ",L-& gt;下壹個-& gt;data.name,L-& gt;下壹個-& gt;data . ave);

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data . c grade & lt;r-& gt;下壹個-& gt;data.cgrade)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}

printf("\nc語言的最高分是:\t%s,%d ",L-& gt;下壹個-& gt;data.name,L-& gt;下壹個-& gt;data . cgrade);

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data . m grade & lt;r-& gt;下壹個-& gt;data.mgrade)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}

printf(" \ n最高數學分數是:\t%s,%d ",L-& gt;下壹個-& gt;data.name,L-& gt;下壹個-& gt;data . m grade);

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data . e grade & lt;r-& gt;下壹個-& gt;data.egrade)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}

printf(" \ n英語的最高分是:\t%s,%d ",L-& gt;下壹個-& gt;data.name,L-& gt;下壹個-& gt;data . e grade);

for(I = 1;我& lt= count-1;i++){

for(r = L-& gt;接下來,j = 1;j & lt= count-I;r = r-& gt;下壹個)

{

if(r-& gt;data.totle & ltr-& gt;下壹個-& gt;data.totle)

{ temp = r-& gt;數據;

r-& gt;data = r-& gt;下壹個-& gt;數據;

r-& gt;下壹個-& gt;data = temp}

/* p 1 = r->;接下來;

r-& gt;next = r-& gt;下壹個-& gt;接下來;

p2 = r-& gt;下壹個-& gt;下壹個-& gt;接下來;

r-& gt;下壹個-& gt;next = p 1;

r-& gt;下壹個-& gt;下壹個-& gt;next = p2*/

j++;

}

}//

printf(" \ n最高總分是:\t%s,%d ",L-& gt;下壹個-& gt;data.name,L-& gt;下壹個-& gt;data . totle);

系統(“暫停”);

}

無效保存(鏈接l)

{

系統(“cls”);

FILE * fp

node * p;

int flag=1,count = 0;

fp=fopen("c:\\student.txt "," WB ");

if(fp==NULL)

{

printf(" \ n = = = = = & gt;提示:重新打開文件時出錯!\ n ");

退出(1);

}

p = l-& gt;接下來;

while(p)

{

if(fwrite(p,sizeof(Node),1,fp)==1)

{

p = p-& gt;接下來;

count++;

}

其他

{

flag = 0;

打破;

}

}

if(標誌)

{

printf(" \ n = = = = = & gt;提示:文件保存成功。(%d條記錄已被保存。)\n”,計數);

shoud save = 0;

}

fclose(FP);

系統(“暫停”);

}

int main()

{

鏈接l;/*鏈接表*/

FILE * fp/*文件指針*/

int sel

char ch

system(" color 4f ");

int count = 0;

節點*p,* r;

//在菜單功能中增加了Printef(" \ t \ t \ t \ t \ t學生成績管理系統\ n \ t \ t - n)。

l=(Node*)malloc(sizeof(Node))。

l-& gt;next = NULL

r = l;

fp=fopen("C:\\student.txt "," a b+ ");

if(fp==NULL)

{

printf(" \ n = = = = = & gt;提示:文件無法打開!\ n ");

退出(0);

}

printf(" \ n = = = = = & gt;提示:文件已經打開,正在導入記錄......\ n ");

而(!feof(fp))

{

p=(節點*)malloc(sizeof(節點));

If (fread (p,sizeof (node),1,FP) = = 1)/*將文件內容放入聯系人*/

{

p->;next = NULL

r-& gt;next = p;

r = p;/*在連接中掛起此聯系人*/

count++;

}

}

fclose(FP);/*關閉文件*/

while(1)

{

系統(“cls”);

printf(" \ n = = = = = & gt;提示:文件已經打開,正在導入記錄......\ n ");

menu();//調用主循環

Printf("請選擇壹個操作:");

scanf("%d ",& ampsel);

if(sel==0)

{

if(shoudsave==1)

{ getchar();

printf(" \ n = = = = = & gt;提示:數據已被更改。是否要保存對文件的更改(y/n)?\ n ");

scanf("%c ",& ampch);

if(ch=='y'||ch=='Y ')

保存(l);

}

printf(" \ n = = = = = & gt;提示:您已經退出系統。再見!\ n ");

打破;

}

開關(選擇)

{

案例1:添加(l);打破;/*增加學生*/

案例二:德爾(l);打破;/*刪除學生*/

案例三:古蘭經(左);打破;/*查詢學生*/

情況四:修改(l);打破;/*修改學生*/

案例5:Disp(l);打破;//顯示信息

案例6:統計數據(l);打破;//統計功能

案例7:sort data(l);打破;//排序

案例8:保存(l);打破;/*拯救學生*/

案例9: printf ("\ t \ t \ t = = = = = =幫助信息= = = = = = = ");menu();系統(“暫停”);打破;

默認:錯誤();getchar();打破;

}

}

While (l){ /*釋放鏈表L(不是1)占用的內存!*/

p = l;

l = l-& gt;接下來;

免費(p);

}

getchar();

返回0;

}

  • 上一篇:怎樣修改主板BIOS
  • 下一篇:無人機入手推薦
  • copyright 2024編程學習大全網