當前位置:首頁 » 編程語言 » 學生成績管理系統c語言流程圖
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

學生成績管理系統c語言流程圖

發布時間: 2022-01-24 02:33:09

1. c語言程序設計 班級學生成績管理系統

設計課題一:班級成績管理系統

一、 問題描述:

對一個有N個學生的班級,每個學生有M門課程。該系統實現對班級成績的錄入、顯示、修改、排序、保存等操作的管理。
二、功能要求:

1、本系統採用一個結構體數組,每個數據的結構應當包括:學號、姓名、M門課程名稱。
2、本系統顯示這樣的菜單:
請選擇系統功能項:
a、 成績錄入
b、 成績顯示
c、 成績保存
d、 成績排序
e、 成績修改(要求先輸入密碼)
f、 成績統計
(1) 顯示每門課程成績最高的學生的基本信息
(2) 顯示每門課程的平均成績
(3) 顯示超過某門課程平均成績的學生人數
g、 退出系統
3、執行一個具體的功能之後,程序將重新顯示菜單。
4、將學生成績保存到文件中。
三、演算法提示:

1、數據結構:結構體類型數組。
2、資料庫結構:下表構成該系統的基本資料庫。

姓名 學號 課程名稱1 課程名稱2 ●●●●●●
char Char float float

四、測試數據:

學生人數N=10
課程門數M=4
課程名:數學、語文、英語、政治

五、其它
對該系統有興趣的同學可以在實現上述基本功能後,完善系統的其它功能。
問題補充:
今天誰能給我答案啊!!!!!!!急急!!!!!!!
提問者: 342123465 - 一級
最佳答案
C語言課程設計報告—班級成績管理系統
需要分析:
學生成績管理系統有13種功能。把這13個功能做成13個子函數。在主函當數中設計一個菜單對這13個子數進行管理。來實現對整個系統的操作。
根據課題的要求。每一個學生的包括姓名(char)、學號(char)、M門課程的成績(float).再加上系統功能上的要求每一學生的信息還要總分和名次等。所以自然的想到要用結構體來定義每一個學生的信息結構。然後用鏈表把它們組成一個有序的整體。用對鏈表的操作來實現對所有學生信息的統一管理(成績顯示、成績排序、成績修改等)。最後為了以後按照處理後的順序保存到文件中。
. 各函數的功能:
概要設計:
程序的模塊組成:
主 函 數: int main()
新建函數:STUDENT *init()
輸入函數 :STUDENT *create()
顯示函數: void print(STUDENT *head)
刪除函數: STUDENT *delete(STUDENT *head)
按名字尋找函數: void lookup(STUDENT *head)
保存函數: void save(STUDENT *head)
按總分排序函數: STUDENT *sort(STUDENT *head)
計算總分和均分函數: void computer(STUDENT *h)
修改函數: STUDENT *Modify(STUDENT *head,STUDENT *new)
按學號排序函數: STUDENT *index(STUDENT *h)
菜單函數:int menu_select()
各個函數的主要功能:
輸入函數: 隨時輸入數據。
菜單函數:顯示系統主菜單。
顯示函數: 顯示所有學生的信息。
尋找函數: 方便學生查找自己的成績。
刪除函數: 刪除某學生的信息。
排序函數: 按總成績排序。
按學號排序函數: 按學號排序。
插入函數: 可以插入新的信息。
保存函數: 保存好學生成績,以免丟失。
統計函數:
l 顯示每門課程成績最高的學生的基本信息。
l 顯示每門課程的平均成績。
l 顯示超過某門課程平均成績的學生人數。
課題的功能模塊的劃分:
開始
菜單界面
功能選擇
初始化函數
輸入學生信息
刪除學生信息
顯示學生信息
查找學生信息
按成績排序
保存到文件
從文件讀數據
插入學生成績
分類合計
退出系統
結束
詳細設計: 整個系統除了主函數外,另外還有14個函數,實現八大功能:輸入功能、顯示功能、查找功能、排序功能、插入功能、保存功能、讀取功能。各個函數的詳細設計說明分別如下:
主函數 main()
利用無限次循環for(;;)和swithch()實現各函數的調用,系統根據輸入的數字選項來調用相應的函數。
菜單選擇函數 int menu_select()
這是一個無參函數,主要實現「功能選擇」的界面,在這個界面里有顯示系統的九大功能,根據每個功能前面的序號進行選擇。等執行完每一個函數功能後,返回菜單。
代碼設計: 初始化函數 STUDENT *init()
這是一個無參函數,裡面只有兩個語句,它的作用是使鏈表初始化,使head的值為NULL和一個清屏語句。比如:沒有這個函數的話,在你沒有輸入任何數據的情況下,去執行顯示功能的時候會顯示一些亂碼!
輸入記錄函數 STUDENT *create() 這是一個無參函數,用來執行學生成績記錄的輸入,當學生為@時停止輸入,函數結束後,帶回一個鏈表頭的指針指向一下個學生的信息插在表頭。
N-S流程圖如下:
head=NULL無條件循環
指針p指向新開辟的單元
指針p是否為空
是 否
輸入學號p->num
輸出 p->num是否為@
內存 是 否
溢出 輸入姓名p->name
停止 for(i=0;i<3;i++)
輸入 輸入成績
返回 p->sum=s;
菜單 p->average=(float)s/3;

顯示記錄函數 void print(STUDENT *head)

這是一個不返回值的有參函數,形參為「鏈表頭的指針」,負責對全部學生成績記錄的輸出,不足之處就是不能對學生成績進行分頁顯示。

演算法:先將p結點的指針指向第一個結點,將p結點(即第一個結點)的數據輸出。然後再將p結點的指針指向p指針的的指針(即下一結點),將p結點(即第一結點)的數據輸出。重復執行此步聚直到p指針指向NULL為止。

N-S流程圖如下:

p=head,使指向第一個結點

輸出p所指向的結點

p指向一下個結點

當p指的不是表尾

程序調試:

由於本課題中的許多知識點都沒有學過都要靠自己到課外的資料中去查找。在用的時候難免出現這樣那樣的錯誤。如開始設計出來的菜單不是預想的那樣,而是總個窗中出現混亂。解決的這個問題的辦法是調整。最後還是老師幫我幫我們找到了問題的所在——for 循環的次超過了鏈表中結點的數量。再就是自定義函數時由於課本的概念不清楚,多寫了空格鍵,以至函數調用不出來。又如:在設計修改學生信息時的密密碼時。當用戶發現輸入密碼錯誤按了退格鍵後,因為「*」並沒有消去。導致用戶再次按退格鍵,又出現前面的情況。最終導致輸入密碼錯誤。所以用了兩次退格鍵:

在對鏈表操作時,要特別鏈表指針的移動(p=p->next)和鏈表尾的判斷 (p= =NULL)。沒有指針的移動,就很容易出現死循環。而在運行過程中不能控制。所以你就會認為是死機。如果沒有鏈表尾的判斷。就會在運行過程出現想不到的錯誤。如:在顯示鏈表信息時,後面就會出現亂碼。

一個系統的菜單和提示信息非常重要。如果沒有這些用戶根本不知道怎麼用你設計的這個系統。在設計的調試過程中也無法順利的完成調試工作。有了一個清晰簡單的菜單和一些提示信息這後,調試過程完成的非常順利。

予我耐心解答的老師和同學,是他們為我小程序的成功起到了關鍵性的作用,那麼多個日夜,如此多的困難,同學們勤懇塌實,從開始到結束,沒有顯出一點倦意,始終熱情高漲,我感謝這種氛圍,感謝學校提供的良好條件。

回顧起此次課程設計,至今我仍感慨頗多,的確,從拿到題目到完成整個編程,從理論到實踐,在整整半個學期的日子裡,可以學到很多很多的東西,同時不僅可以鞏固了以前所學過的知識,而且學到了很多在書本上所沒有學到過的知識。通過這次課程設計使我懂得了理論與實際相結合是很重要的,只有理論知識是遠遠不夠的,只有把所學的理論知識與實踐相結合起來,從理論中得出結論,才能真正為社會服務,從而提高自己的實際動手能力和獨立思考的能力。在設計的過程中遇到問題,可以說得是困難重重,這畢竟第一次做的,難免會遇到過各種各樣的問題,同時在設計的過程中發現了自己的不足之處,對以前所學過的知識理解得不夠深刻,掌握得不夠牢固,比如說結構體……通過這次課程設計之後,一定把以前所學過的知識重新溫故。

本次課程設計結束了,對於我的影響很大。我通過這次實踐學到了許多知識。學到了設計一個簡單的系統。要注意哪些方面。也使我知道自己哪些方面做得還不夠。

但我出總結出了一點點的經驗如下:

1、要對系統的功能和要求做出詳細的分析,並合理分解任務。
2、把分解出來的子任務,做給一個相對獨立的模塊。
3、在設計一個模塊之前,要簡單構想一下總界面的顯視情況。
4、針對構想出來的界面進行程序的編寫。
最後,感謝老師您對我的指導和從百忙中抽空看我的設計,謝謝!

附件:
源程序:
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
#include "dos.h"
#define N 4 /*定義常數*/
typedef struct z1 /*定義數據結構*/
{
char no[12];
char name[20];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); /*初始化函數*/
STUDENT *create(); /*創建鏈表*/
STUDENT *delete(STUDENT *h); /*刪除記錄*/
void print(STUDENT *h); /* 顯示所有記錄*/
void lookup(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *Modify(STUDENT *h); /*修改記錄*/
void append(); /*追加記錄*/
STUDENT *sort(STUDENT *h); /*按總分排序*/
STUDENT *index(STUDENT *h); /*按學號排序*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
printf("\n\n\n\n\n\n\n\n\n");
printf(" * * ******* * ***** ***** * * ******* \n");
printf(" * * * * * * * ** * * * \n");
printf(" * * * * ******* * * * * * *** * ******* \n" );
printf(" * * * * * * * * * * * * * \n");
printf(" * * ******* ******* ***** * *** * * * ******* \n");
printf("\n");
printf("\n");
printf("\n");
sleep(2);
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break; /*執行初始化*/
case 1:head=create();break; /*創建鏈表*/
case 2:print(head);break; /*顯示全部記錄*/
case 3:head=delete(head);break; /*刪除記錄*/
case 4:lookup(head);break; /*按名字查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=Modify(head); break; /*修改記錄,一般會插在表尾*/
case 9:head=sort(head);break; /*按部分排序*/
case 10:append();break; /*追加記錄*/
case 11:head=index(head);break; /*按學號排序*/
case 12: exit(0); /*如菜單返回值為12程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 00. init list", /*初始化*/
" 01. Enter list", /*輸入記錄*/
" 02. print list ", /*顯示單鏈表中所有記錄*/
" 03. Delete a record from list", /*從表中刪除記錄*/
" 04. Search record on name", /*按照姓名查找記錄*/
" 05. Save the file", /*將單鏈表中記錄保存到文件中*/
" 06. Load the file", /*從文件中讀入記錄*/
" 07. compute the score", /*計算所有學生的總分和均分*/
" 08. Modify an information ", /*修改某學號的信息*/
" 09. sort to make new file", /*排序*/
" 10. append record to file", /*追加記錄到文件中*/
" 11. index on nomber", /*按學號排序*/
" 12. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba); /*輸出右垂直線*/
}
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{printf("\n make by wenwei");
printf("\n Enter you choice(0~13):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{ clrscr();
return NULL;
}
/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
clrscr();
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') { clrscr();break; } /*如果學號首字元為@則結束輸入,清屏後返回*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/
printf("bad data,repeat input\n"); /*出錯提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各門課程成績*/
}
info->sum=s; /*將總分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值為0*/
info->next=h; /*將頭結點做為新輸入結點的後繼結點*/
h=info; /*新輸入結點為新的頭結點*/
clrscr();
}
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*顯示提示信息*/
scanf("%s",p); /*輸入字元串*/
if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/
}while(strlen(p)>count);
strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/
}
/*輸出鏈表中結點信息*/
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n*********************************STUDENT************************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|----|--------|--------|-----|\n");
while(p!=NULL) /*只要p不是尾結點,就輸出記錄*/
{
i++;
printf("|%3d|%-10s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],p->score[2],p->score[3],p->sum,p->average,p->order);
p=p->next;
}
printf("***********************************end**************************************\n");
getch(); /*輸入任一鍵返回主菜單*/
clrscr(); /*清屏*/
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[12]; /*存放學號*/
char *pass="wenwei28";
char a[20],b=NULL;
int i=0;
clrscr();
printf("Input your password:");
while((i<20)&&(b!='\r'))
{ b=getch(); /*無回顯輸入*/
if(b==8)
{ if(i>0)
{a[--i]=NULL;
putchar(8); /*退格鍵*/
putchar(' '); /*以空格代替*/
putchar(8);
}
else putchar(7); /*沒有任何字元的退格,響鈴警告*/
}
else if(b!='\r')
{ a[i++]=b; /*只要不是退格和回車就接受*/
putchar('*');
}
else
{a[i]=NULL; break; /*密碼輸入完了,記得加個NULL到後面*/
}
}
if(strcmp(a,pass)!=0)
{clrscr();
printf("Password is mistake Tow seconds to return!");
sleep(2);clrscr();return h;
}
else {printf("Password is OK! Welcome to come!"); sleep(3);
}
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
{ printf("\nlist no %s student\n",s);sleep(2);clrscr();return h;}
else /*p不為空,顯示找到的記錄信息*/
{
printf("*********************************have found********************************\n");
printf("|no | name | sc1| sc2| sc3| sc4| sum | ave |order|\n");
printf("|------------|---------------|----|----|----|----|--------|--------|-----|\n");
printf("|%-12s|%-15s|%4d|%4d|%4d|%4d| %6.2f | %6-5.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[ q=p; /*保存當前結點的指針,作為下一結點的前驅*/
p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
getch(); /*按任意鍵返回主菜單*/
clrscr();
return h; /*返回頭指針*/
}
/*成績統計*/
void computer(STUDENT *h)
{
STUDENT *p,*t,*q; /*定義移動指針*/
float saverage[N]={0}; /*均分初值為0*/
int i;
clrscr();
for (i=0;i<N;i++)
{ int n=0,j=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->score[i]; /*累加總分*/
j++; /*統計記錄條數*/
p=p->next; /*指針後移*/
h; /*返回頭指針
}

2. 求C語言編寫的「學生成績管理系統」的程序帶有流程圖的最好~!

#include "stdio.h" #include "string.h" #include "stdlib.h" #include "conio.h"#include "mem.h" #include "ctype.h"#include "alloc.h"#define N 4struct student
{
long num;
char name[20];
char sex;
int chinese;
int math;
int english;
};
struct student stu[N];
int n;
int choose;
void fun1();
void fun2();
void fun3();
void fun4();void fun1()
{
int i;
for(i=0;i<N;i++)
{
printf("Please shuru xuehao:\n"); /*請輸入學號*/
scanf("%ld",&stu[i].num);
printf("Please shuru mingzi:\n"); /*請輸入名字*/
scanf("%s",stu[i].name);
getchar();
printf("Please shuru sex:\n"); /*請輸入性別*/
scanf("%c",&stu[i].sex);
printf("Please shuru yuwen score:\n"); /*請輸入語文分數*/
scanf("%d",&stu[i].chinese);
printf("Please shuru shuxue score:\n"); /*請輸入數分數*/ scanf("%d",&stu[i].math); printf("Please input yingyu score:\n"); /*請輸入英語分數*/ scanf("%d",&stu[i].English); printf("Please input jisuji score:\n"); /*請輸入計算機分數*/
scanf("%d",&stu[i]. jisuji); printf("Please input zheng score:\n"); /*請輸入政治分數*/ scanf("%d",&stu[i]. zheng);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.scor e[3]+data. score[4]; /*顯示總分*/ fwrite(&data,sizeof(data),1,fp); printf("another?y/n"); ch=getch(); if(ch=='n'||ch=='N') break; } }void xianshi() /*自定義顯示數據函數*/{ float s;int n; if((fp=fopen("s_score.txt","rb+"))==NULL) { printf("Cannot reading this file.\n"); exit(0); } for(i=0;i<=1000;i++) { if((fread(&info[i],sizeof(info[i]),1,fp))!=1) break; /*用break結束本次循環*/ } getch(); fclose(fp);}void fun2()
{ int i;
for(i=0;i<N;i++)
{
printf("%ld\t%s\t%c\n",stu[i].num,stu[i].name,stu[i].sex);
printf("%d\t%d\t%d\n",stu[i].chinese,stu[i].math,stu[i].English);
}
}void fun3()
{ char name[20];
int k,f=0;
printf("Please shuru the person's name that to check to seek: "); /*請輸入您所要查找的姓名*/
gets(name);
for(k=0;k<2;k++)
if(strcmp(name,stu[k].name)==0)
{ printf("%ld,%s,%c,%d,%d,%d",stu[k].num,stu[k].name,stu[k].sex,stu[k].chinese,stu[k].math,stu[k].english);
f=1;
}
if(f=0)
printf("Have no this person ~~~TOT"); /*沒有這個人*/

}void fun4()
{ int k;
char newname[20];
printf("Please input the name of this student!\n"); /*請輸入該學生的名字*/
gets(newname);
printf("The record of all students is:\n"); /*所有學生記錄為*/
fun2();
for(k=0;k<2;k++)
if(strcmp(newname,stu[k].name)==0)
{
printf("Student whom you choose is:\n"); ?* 你選擇的學生為*/
printf("%ld,%s,%c,%d,%d,%d",stu[k].num,stu[k].name,stu[k].sex,stu[k].chinese,stu[k].math,stu[k].english);
stu[k].num=stu[k+1].num;
strcpy(stu[k].name,stu[k+1].name);
stu[k].sex=stu[k+1].sex;
stu[k].chinese=stu[k+1].chinese;
stu[k].math=stu[k+1].math;
stu[k].english=stu[k+1].english; }
printf("The student's record was delete to complete!"); /*學生記錄刪除完畢*/}while(1){ clrscr(); /*清屏幕*/ gotoxy(1,1); /*移動游標*/ textcolor(RED); /*設置文本顯示顏色為紅色*/ textbackground(WHTIE); /*設置背景顏色為白色*/ window(1,1,99,99); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/ clrscr(); printf("******************************************************\n");
printf("***********welcome to use student manage**************\n");
printf ("*******************************************************\n");
printf("*************designer:jisuanjikexueyujishu************\n");printf ("***************************Procer:*****************\n");
printf ("***************chenjian,fusong,guoqingwen**************\n");
printf("*************** 1>shuru******2>xiugai*****************\n"); printf("*************** 3>shanchu****4>chazhao****************\n"); printf("*************** 5>xianshi****6>exit*******************\n"); printf("******************************************************\n"); printf("* ------------------------------------------------ * \n"); printf ("Please input the operation that you have to carry on:\n"); /*請輸入您要進行的操作*/
scanf("%d",&choose);
while(choose!=1&&choose!=2&&choose!=3&&choose!=4)
{ printf("The numeral have another also the form press wrong~~~~ Please press one more time ^_^"); /*數字多也表按錯~~~~請再按一遍*/
scanf("%d",&choose);
}
while(choose==1||choose==2||choose==3||choose==4)
{switch(choose)<br> {<br> case 1:fun1(); break;<br> case 2:fun2(); break;<br> case 3:fun3(); break;<br> case 4:fun4(); break;<br> }
printf("Please input the operation that you have to carry on:\n");/*請輸入您要進行的操作*/
scanf("%d",&choose);
} 我這有N個~~來我宿舍,給你啊~~~呵呵

3. c語言幫幫忙 學生成績管理 要用流程圖描述實現演算法,根據演算法進行代碼的編寫

//biaobiao.cpp:.

//

#include"stdafx.h"

#include<stdio.h>

#include<math.h>

#include<string.h>

#defineMaxSize100

typedefstructstud

{

charname[10];

intnum;

floatc;

floatmath;

floatenglish;

floatzf;

intpnum;

intpzf;

}Stud;

voidReadFile(Studstud[],int&n)

{

FILE*fp;

longlength;

inti;

if((fp=fopen("stud.dat","rb"))==NULL){

n=0;

return;

}

fseek(fp,0,2);

length=ftell(fp);

rewind(fp);

n=length/sizeof(Stud);

if(n!=0)

n--;

else

stud[0].pnum=stud[0].pzf=-1;

for(i=0;i<=n;i++)

fread(&stud[i],sizeof(Stud),1,fp);

fclose(fp);

}

voidClearup(Studstud[],int&n)

{

FILE*fp;

if((fp=fopen("stud.dat","wb"))==NULL){

printf(">>文件不能打開 ");

return;

}

stud[0].pnum=stud[0].pzf=-1;

n=0;

fclose(fp);

printf("============================================================================ ");

}

voidSaveFile(Studstud[],int&n)

{

inti;

FILE*fp;

if((fp=fopen("stud.dat","wb"))==NULL){

printf(">>文件不能打開 ");

return;

}

if(n>1)

for(i=0;i<=n;i++)

fwrite(&stud[i],sizeof(Stud),1,fp);

fclose(fp);

printf("============================================================================ ");

}

voidInput(Studstud[],int&n)

{

inti;

intflag=0;

printf(">>請輸入登記學生姓名學號C語言成績數學成績英語成績: ");

n++;

scanf("%s%d%f%f%f",&stud[n].name,&stud[n].num,&stud[n].c,&stud[n].math,&stud[n].english);

stud[n].zf=stud[n].c+stud[n].math+stud[n].english;

for(i=0;i<=n-2;i++)

{

if(stud[i].num==stud[n].num)

{

flag=flag+1;

}

}

if(flag!=0)

printf("學號輸入重復,請檢查!! ");

stud[n].pnum=stud[n].pzf=0;

printf("============================================================================ ");

}

voidOutputFile(Studstud[],intn)

{

inti;

if(n<1)

{

printf(">>沒任何記錄 ");

return;

}

printf("----------------------------------------------------------------- ");

printf("|姓名|學號|C語言成績|數學成績|英語成績|總分| ");

printf("----------------------------------------------------------------- ");

for(i=1;i<=n;i++)

{

printf("|%10s|%3d|%6.2f|%6.2f|%6.2f|%6.2f| ",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

printf("----------------------------------------------------------------- ");

}

}

voidDispnum(Studstud[],intn)

{ inti=2,j;

intk=stud[0].pnum;

if(n<1)

{

printf(">>沒有這種記錄,不能進行排序 ");

return;

}

stud[0].pnum=1;stud[1].pnum=-1;

while(i<=n)

{

j=0;

while(stud[j].pnum!=-1&&stud[stud[j].pnum].num<stud[i].num)

j=stud[j].pnum;

stud[i].pnum=stud[j].pnum;

stud[j].pnum=i;

i++;

}

printf("----------------------------------------------------------------- ");

printf("|姓名|學號|C語言成績|數學成績|英語成績|總分| ");

printf("----------------------------------------------------------------- ");

while(k!=-1)

{

printf("|%10s|%3d|%6.2f|%6.2f|%6.2f|%6.2f| ",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf);

printf("----------------------------------------------------------------- ");

k=stud[k].pnum;

}

printf("============================================================================ ");

}

voidDispzf(Studstud[],intn)

{ inti=2,j;

intk=stud[0].pzf;

if(n<1)

{

printf(">>沒有記錄,不能進行排序 ");

return;

}

stud[0].pzf=1;stud[1].pzf=-1;

while(i<=n)

{

j=0;

while(stud[j].pzf!=-1&&stud[stud[j].pzf].zf<stud[i].zf)

j=stud[j].pzf;

stud[i].pzf=stud[j].pzf;

stud[j].pzf=i;

i++;

}

printf("----------------------------------------------------------------- ");

printf("|姓名|學號|C語言成績|數學成績|英語成績|總分| ");

printf("----------------------------------------------------------------- ");

while(k!=-1)

{

printf("|%10s|%3d|%6.2f|%6.2f|%6.2f|%6.2f| ",stud[k].name,stud[k].num,stud[k].c,stud[k].math,stud[k].english,stud[k].zf);

printf("----------------------------------------------------------------- ");

k=stud[k].pzf;

}

printf("============================================================================ ");

}

voidxuehao(Studstud[],intn)

{

intnum,i,flag=0;

printf("請輸入你要查詢學生的學號: ");

scanf("%d",&num);

for(i=0;i<=n;i++)

{

if(stud[i].num==num)

{

printf("----------------------------------------------------------------- ");

printf("|姓名|學號|C語言成績|數學成績|英語成績|總分| ");

printf("----------------------------------------------------------------- ");

printf("|%10s|%3d|%6.2f|%6.2f|%6.2f|%6.2f| ",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

printf("----------------------------------------------------------------- ");

flag++;

}

}

if(flag==0)printf("查詢操作失敗,沒有你要查詢的學生!!! ");

elseprintf("查詢操作成功!!! ");

printf("============================================================================ ");

}

voidxingming(Studstud[],intn)

{

charname[10];

inti,flag=0;

printf("請輸入你要查詢的學生的姓名: ");

scanf("%s",&name);

for(i=0;i<=n;i++)

{

if(strcmp(stud[i].name,name)==0)

{

printf("----------------------------------------------------------------- ");

printf("|姓名|學號|C語言成績|數學成績|英語成績|總分| ");

printf("----------------------------------------------------------------- ");

printf("|%10s|%3d|%6.2f|%6.2f|%6.2f|%6.2f| ",stud[i].name,stud[i].num,stud[i].c,stud[i].math,stud[i].english,stud[i].zf);

printf("----------------------------------------------------------------- ");

flag++;

}

}

if(flag==0)printf("查詢操作失敗,沒有你要查詢的學生!!! ");

elseprintf("查詢操作成功!!! ");

printf("============================================================================ ");

}

voidModify(Studstud[],intn)

{

intNO,j;

intflag=0;

floatc,math,english;

printf("請輸入你要修改學生的學號: ");

scanf("%d",&NO);

for(j=0;j<=n;j++)

{

if(stud[j].num==NO)

{

printf("請輸入你要修改的學生的C語言成績數學成績英語成績: ");

scanf("%f%f%f",&c,&math,&english);

stud[j].c=c;stud[j].math=math;stud[j].english=english;

stud[j].zf=stud[j].c+stud[j].math+stud[j].english;

flag++;

}

}

if(flag==0)printf("修改操作失敗,該學號不存在!!! ");

elseprintf("修改操作成功!!! ");

printf("============================================================================ ");

}

voidDelete(Studstud[],int&n)

{

intNO,i,j;

intflag=0;

printf("請輸入你要刪除的學生的學號: ");

scanf("%d",&NO);

for(i=0;i<=n;i++)

{

if(stud[i].num==NO)

{

for(j=i;j<n;j++)

stud[j]=stud[j+1];

flag++;

}

}

if(flag==0)printf("刪除操作失敗,該學號不存在!!! ");

else{n--;

printf("刪除操作成功!!! ");

}

printf("============================================================================ ");

}

voidmain()

{ doublemmy=sin(0.0);

Studstud[MaxSize];

intk,n;

printf("歡迎使用學生成績管理系統!!! ");

printf("============================================================================ ");

ReadFile(stud,n);

do{

printf("1:學生登記2:顯示學生信息 ");

printf("3:清空記錄4:刪除記錄 ");

printf("5:按學號排序輸出6:按總分排序輸出 ");

printf("7:學號查詢8:姓名查詢 ");

printf("9:修改0:儲存退出 ");

printf("請選擇相應的功能:");

scanf("%d",&k);

if(k>9&&k<0)printf("操作不當,請重新輸入: ");

switch(k)

{

case1:Input(stud,n);

break;

case2:OutputFile(stud,n);

break;

case3:Clearup(stud,n);

break;

case4:Delete(stud,n);

break;

case5:Dispnum(stud,n);

break;

case6:Dispzf(stud,n);

break;

case7:xuehao(stud,n);

break;

case8:xingming(stud,n);

break;

case9:Modify(stud,n);

break;

case0:SaveFile(stud,n);

break;

}

}while(k!=0);

}

效果圖:

4. 急求C語言 學生成績管理系統 程序及流程圖(要簡單的)

要最簡單,學生成績定義一個int數組,姓名或學號定義一個char數組。定義一個變數n記錄當前數組保存的學生個數,初值0。
添加學生信息就給這兩個數組賦值就好了。同時n++。
要刪除那你循環遍歷數組,通過學生名或學號找到數組對應下標。然後把之後的數組元素往前移動一位。同時n--。
修改信息就更簡單,循環遍歷到對應下標直接重新賦值。
如果想復雜點,可以用結構定義學生相關信息,然後寫鏈表創建刪除和修改。這方面我之前給別人寫過好幾個,你可以去我回答記錄里先。

5. C語言程序設計學生成績管理系統

隨便寫了些
不滿意你自己在改改吧
#include <stdio.h>
#include <malloc.h>
#include <memory.h>
#include <string.h>

typedef struct student{
int Num;
char name[12];
int age;
struct student* pNext;
}STUDENT,*PSTUDENT;
#define LEN sizeof(STUDENT)
PSTUDENT pHeader,pNail;
int n=0;
void PrintMenu();
bool ExistStudent(int Num);
void InsertInfo();
bool DeleteInfo(int Num);
bool UpdateInfo(int Num,PSTUDENT pNewInfo);
void PrintInfo();
int main()
{
PrintMenu();
int iSel=0;
while(1)
{
printf("輸入操作選擇:");
scanf("%d",&iSel);
switch(iSel)
{
case 0:
return 0;
case 1:
PrintInfo();
continue;
case 2:
InsertInfo();
continue;
case 3:
{
int num=0;
printf("輸入要刪除的學生學號:");
scanf("%d",&num);
if(DeleteInfo(num))
printf("刪除成功!\n");
else
printf("刪除失敗!\n");
continue;
}
case 4:
{
int num=0;
printf("輸入要修改的學生學號:");
scanf("%d",&num);
STUDENT stu={0};
printf("輸入該學生的新信息(空格分隔):");
scanf("%d%s%d",&stu.Num,&stu.name,&stu.age);
if(UpdateInfo(num,&stu))
printf("修改成功!\n");
else
printf("修改失敗!\n");
continue;
}
continue;
default:
continue;
}
}
return 0;
}
void PrintMenu()
{
printf("******操作菜單******\n");
printf("* 1. 列印學生信息\n");
printf("* 2. 添加學生信息\n");
printf("* 3. 刪除學生信息\n");
printf("* 4. 修改學生信息\n");
printf("* 0. 退出系統\n");
printf("*********************\n");
}

void InsertInfo()
{
PSTUDENT pCur;
printf("請輸入學生記錄(各元素用空格分隔,輸入學號為0時停止)\n");
while(true)
{
pCur = (PSTUDENT)malloc(LEN);
memset(pCur,NULL,LEN);
printf("==>:");
scanf("%d%s%d",&pCur->Num,pCur->name,&pCur->age);
if(pCur->Num==0)
break;
if(ExistStudent(pCur->Num))
{
printf("該學生信息已經存在!\n");
break;
}
if(n==0)
{

pNail=pHeader=pCur;
pHeader->pNext=NULL;
}
else
{
pNail->pNext=pCur;
pNail=pCur;
pCur->pNext=NULL;
}
n++;
}
}
bool DeleteInfo(int Num)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
{

pHeader=pStu->pNext;
return true;
}
else if(pStu->pNext&&Num==pStu->pNext->Num)
{
pStu->pNext=pStu->pNext->pNext;
return true;
}
}
return false;
}
bool UpdateInfo(int Num,PSTUDENT pNewInfo)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
if(Num!=pNewInfo->Num&&ExistStudent(pNewInfo->Num))
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
{
pStu->Num=pNewInfo->Num;
memset(pStu->name,0,sizeof(pStu->name));
strcpy(pStu->name,pNewInfo->name);
pStu->age=pNewInfo->age;
return true;
}
}
return true;
}
void PrintInfo()
{
PSTUDENT pStu=pHeader;
if(!pStu)
{
printf("沒有學生信息!\n");
return;
}
for(pStu;pStu!=NULL;pStu=pStu->pNext)
printf("學號:%d 姓名:%s 年齡:%d\n",pStu->Num,pStu->name,pStu->age);
}
bool ExistStudent(int Num)
{
PSTUDENT pStu=pHeader;
if(!pStu)
return false;
for(pStu;pStu!=NULL;pStu=pStu->pNext)
{
if(Num==pStu->Num)
return true;
}
return false;
}

6. 怎麼寫c語言的學生成績管理系統的流程圖哦

在turbo
c
2.0下測試通過
[VC學生成績管理系統.rar]
-
可以運行的c語言課程設計報告,裡面有源碼和詳細的WORD文檔.包含流程圖.詳細的分析等.

7. c語言學生成績管理系統

學生成績管理(c語言版)
/*11.3.2 源程序*/
/***********xuesheng.c***********/
/******頭文件(.h)***********/
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
#define N 3 /*定義常數*/
typedef struct z1 /*定義數據結構*/
{
char no[11];
char name[15];
int score[N];
float sum;
float average;
int order;
struct z1 *next;
}STUDENT;
/*以下是函數原型*/
STUDENT *init(); /*初始化函數*/
STUDENT *create(); /*創建鏈表*/
STUDENT *delete(STUDENT *h); /*刪除記錄*/
void print(STUDENT *h); /* 顯示所有記錄*/
void search(STUDENT *h); /*查找*/
void save(STUDENT *h); /*保存*/
STUDENT *load(); /*讀入記錄*/
void computer(STUDENT *h); /*計算總分和均分*/
STUDENT *insert(STUDENT *h); /*插入記錄*/
void append(); /*追加記錄*/
void (); /*復制文件*/
STUDENT *sort(STUDENT *h); /*排序*/
STUDENT *index(STUDENT *h); /*索引*/
void total(STUDENT *h); /*分類合計*/
int menu_select(); /*菜單函數*/
/******主函數開始*******/
main()
{
int i;
STUDENT *head; /*鏈表定義頭指針*/
head=init(); /*初始化鏈表*/
clrscr(); /*清屏*/
for(;;) /*無限循環*/
{
switch(menu_select()) /*調用主菜單函數,返回值整數作開關語句的條件*/
{ /*值不同,執行的函數不同,break 不能省略*/
case 0:head=init();break; /*執行初始化*/
case 1:head=create();break; /*創建鏈表*/
case 2:head=delete(head);break; /*刪除記錄*/
case 3:print(head);break; /*顯示全部記錄*/
case 4:search(head);break; /*查找記錄*/
case 5:save(head);break; /*保存文件*/
case 6:head=load(); break; /*讀文件*/
case 7:computer(head);break; /*計算總分和均分*/
case 8:head=insert(head); break; /*插入記錄*/
case 9:();break; /*復制文件*/
case 10:head=sort(head);break; /*排序*/
case 11:append();break; /*追加記錄*/
case 12:head=index(head);break; /*索引*/
case 13:total(head);break; /*分類合計*/
case 14:exit(0); /*如菜單返回值為14程序結束*/
}
}
}
/*菜單函數,返回值為整數*/
menu_select()
{
char *menu[]={"***************MENU***************", /*定義菜單字元串數組*/
" 0. init list", /*初始化*/
" 1. Enter list", /*輸入記錄*/
" 2. Delete a record from list", /*從表中刪除記錄*/
" 3. print list ", /*顯示單鏈表中所有記錄*/
" 4. Search record on name", /*按照姓名查找記錄*/
" 5. Save the file", /*將單鏈表中記錄保存到文件中*/
" 6. Load the file", /*從文件中讀入記錄*/
" 7. compute the score", /*計算所有學生的總分和均分*/
" 8. insert record to list ", /*插入記錄到表中*/
" 9. the file to new file", /*復制文件*/
" 10. sort to make new file", /*排序*/
" 11. append record to file", /*追加記錄到文件中*/
" 12. index on nomber", /*索引*/
" 13. total on nomber", /*分類合計*/
" 14. Quit"}; /*退出*/
char s[3]; /*以字元形式保存選擇號*/
int c,i; /*定義整形變數*/
gotoxy(1,25); /*移動游標*/
printf("press any key enter menu......\n"); /*壓任一鍵進入主菜單*/
getch(); /*輸入任一鍵*/
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
gotoxy(10,2); /*移動游標*/
putch(0xc9); /*輸出左上角邊框┏*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出上邊框水平線*/
putch(0xbb); /*輸出右上角邊框 ┓*/
for(i=3;i<20;i++)
{
gotoxy(10,i);putch(0xba); /*輸出左垂直線*/
gotoxy(54,i);putch(0xba);
} /*輸出右垂直線*/
gotoxy(10,20);putch(0xc8); /*輸出左上角邊框┗*/
for(i=1;i<44;i++)
putch(0xcd); /*輸出下邊框水平線*/
putch(0xbc); /*輸出右下角邊框┛*/
window(11,3,53,19); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr(); /*清屏*/
for(i=0;i<16;i++) /*輸出主菜單數組*/
{
gotoxy(10,i+1);
cprintf("%s",menu[i]);
}
textbackground(BLACK); /*設置背景顏色為黑色*/
window(1,1,80,25); /*恢復原窗口大小*/
gotoxy(10,21); /*移動游標*/
do{
printf("\n Enter you choice(0~14):"); /*在菜單窗口外顯示提示信息*/
scanf("%s",s); /*輸入選擇項*/
c=atoi(s); /*將輸入的字元串轉化為整形數*/
}while(c<0||c>14); /*選擇項不在0~14之間重輸*/
return c; /*返回選擇項,主程序根據該數調用相應的函數*/
}
STUDENT *init()
{
return NULL;
}

/*創建鏈表*/
STUDENT *create()
{
int i; int s;
STUDENT *h=NULL,*info; /* STUDENT指向結構體的指針*/
for(;;)
{
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info) /*如果指針info為空*/
{
printf("\nout of memory"); /*輸出內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號並校驗*/
if(info->no[0]=='@') break; /*如果學號首字元為@則結束輸入*/
inputs("enter name:",info->name,15); /*輸入姓名,並進行校驗*/
printf("please input %d score \n",N); /*提示開始輸入成績*/
s=0; /*計算每個學生的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次*/
{
do{
printf("score%d:",i+1); /*提示輸入第幾門課程*/
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0) /*確保成績在0~100之間*/
printf("bad data,repeat input\n"); /*出錯提示信息*/
}while(info->score[i]>100||info->score[i]<0);
s=s+info->score[i]; /*累加各門課程成績*/
}
info->sum=s; /*將總分保存*/
info->average=(float)s/N; /*求出平均值*/
info->order=0; /*未排序前此值為0*/
info->next=h; /*將頭結點做為新輸入結點的後繼結點*/
h=info; /*新輸入結點為新的頭結點*/
}
return(h); /*返回頭指針*/
}
/*輸入字元串,並進行長度驗證*/
inputs(char *prompt, char *s, int count)
{
char p[255];
do{
printf(prompt); /*顯示提示信息*/
scanf("%s",p); /*輸入字元串*/
if(strlen(p)>count)printf("\n too long! \n"); /*進行長度校驗,超過count值重輸入*/
}while(strlen(p)>count);
strcpy(s,p); /*將輸入的字元串拷貝到字元串s中*/
}
/*輸出鏈表中結點信息*/
void print(STUDENT *h)
{
int i=0; /* 統計記錄條數*/
STUDENT *p; /*移動指針*/
clrscr(); /*清屏*/
p=h; /*初值為頭指針*/
printf("\n\n\n****************************STUDENT********************************\n");
printf("|rec|nO | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|---|----------|---------------|----|----|----|--------|-------|-----|\n");
while(p!=NULL)
{
i++;
printf("|%3d |%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", i, p->no,p->name,p->score[0],p->score[1],
p->score[2],p->sum,p->average,p->order);
p=p->next;
}
printf("**********************************end*********************************\n");
}
/*刪除記錄*/
STUDENT *delete(STUDENT *h)
{
STUDENT *p,*q; /*p為查找到要刪除的結點指針,q為其前驅指針*/
char s[11]; /*存放學號*/
clrscr(); /*清屏*/
printf("please deleted no\n"); /*顯示提示信息*/
scanf("%s",s); /*輸入要刪除記錄的學號*/
q=p=h; /*給q和p賦初值頭指針*/
while(strcmp(p->no,s)&&p!=NULL) /*當記錄的學號不是要找的,或指針不為空時*/
{
q=p; /*將p指針值賦給q作為p的前驅指針*/
p=p->next; /*將p指針指向下一條記錄*/
}
if(p==NULL) /*如果p為空,說明鏈表中沒有該結點*/
printf("\nlist no %s student\n",s);
else /*p不為空,顯示找到的記錄信息*/
{
printf("*****************************have found***************************\n");
printf("|no | name | sc1| sc2| sc3| sum | ave |order|\n");
printf("|----------|---------------|----|----|----|--------|-------|-----|\n");
printf("|%-10s|%-15s|%4d|%4d|%4d| %4.2f | %4.2f | %3d |\n", p->no,
p->name,p->score[0],p->score[1],p->score[2],p->sum,
p->average,p->order);
printf("********************************end*******************************\n");
getch(); /*壓任一鍵後,開始刪除*/
if(p==h) /*如果p==h,說明被刪結點是頭結點*/
h=p->next; /*修改頭指針指向下一條記錄*/
else
q->next=p->next; /*不是頭指針,將p的後繼結點作為q的後繼結點*/
free(p); /*釋放p所指結點空間*/
printf("\n have deleted No %s student\n",s);
printf("Don't forget save\n");/*提示刪除後不要忘記保存文件*/
}
return(h); /*返回頭指針*/
}

8. 題目:學生成績管理系統(C語言)

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

#define max 20

typedef struct student //學生
{
char sno[max]; // 學號
char sname[max]; //姓名
char sex[max]; //性別
char age[max]; //年齡
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年級

struct student* next;
} student;

student* head;

int LogOn() //登錄模塊,已實現輸入密碼不回顯,如果中途發現輸錯某幾位,可退格鍵重輸
{
char username[max],password[max];
printf("\n請輸入用戶名:");
scanf("%s",username);
printf("\n請輸入密碼(最多15位):");

//開始以不回顯且支持退格方式獲取輸入密碼
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//條件i>=0是用於限制退格的范圍
{
if(password[i-1]=='\b')//對退格鍵的處理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';

//已獲取密碼。驗證用戶身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登錄成功!");
return 1;
}
else
return 0;

}

void regist()
{
char ch;
student *s,*ptr; //s用來建新結點,ptr用來暫存頭結點

do
{

s=(student*)malloc(sizeof(student)); // 新建一個學生結點

printf("\n開始注冊..."); //開始注冊
printf("\n請輸入該學生的學號:");
scanf("%s",s->sno);
printf("\n請輸入該學生的姓名:");
scanf("%s",s->sname);
printf("\n請輸入該學生的性別:");
scanf("%s",s->sex);
printf("\n請輸入該學生的年齡:");
scanf("%s",s->age);
printf("\n請輸入該學生的系:");
scanf("%s",s->depart);
printf("\n請輸入該學生所在的班:");
scanf("%s",s->classs);
printf("\n請輸入該學生所在的年級");
scanf("%s",s->grade);

ptr=head;
head=s;//將新結點插入隊頭
s->next=ptr;

fflush(stdin);
printf("\n請問是否繼續注冊?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');

return;
}

void ElePrint(char str[]) //輸出單個元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//為了對齊輸出,需插入一些空格
return;
}

int LinePrint(student *ptr) //輸出一行
{
if(ptr==NULL) //檢查傳進來的指針
return 0;

printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);

return 1;
}

void print() //輸出全部學生信息
{
student *ptr=head;
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查詢模塊
{
int method;//查詢方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用來接收查詢關鍵字
while(1)
{
printf("\n請選擇查詢方式");
printf("\n1.按學號查詢");
printf("\n2.按姓名查詢");
printf("\n3.按所在系查詢");
printf("\n4.按所在班級查詢");
printf("\n5.按所在年級查詢");
printf("\n6.列印全部學生信息");
printf("\n7.返回主菜單\n");

scanf("%d",&method);

student *p=head,*temp;

switch(method)
{
case 1:
printf("\n請輸入要查詢的學號:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
LinePrint(p);
break;
case 2:
printf("\n請輸入要查詢的姓名:");
scanf("%s",name);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("\n請輸入學生所在的系:");
scanf("%s",departm);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("\n請輸入學生所在的班:");
scanf("%s",clss);
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;

case 5:
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;

case 6:
print();
break;

case 7:
return;
default:
printf("很抱歉,暫無此查詢方式!");
break;
}
}

}

void modify()//修改學生信息
{
char num[max];
student *p=head;
printf("\n請輸入要修改的學生的學號:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n錯誤:沒有此學生的信息!\n");
return;

}
LinePrint(p);

printf("\n請輸入要修改的該學生的信息:");
printf("\n1.姓名");
printf("\n2.性別");
printf("\n3.年齡");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年級");

char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n請輸入新的信息:");

switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}

LinePrint(p);
return;
}

void del()// 刪除某學生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n請輸入要刪除的學生的學號:");
scanf("%s",num1);
while(p)//查找該學生所在的結點
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}

}//while
if(!p)
{
printf("\n不存在此學生的信息.");
return;
}
LinePrint(p);//輸出該學生的信息
printf("\n請問真的要刪除該學生的信息嗎?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已經刪除該學生的信息.");
}
return;
}

void sort() //排序模塊。將學生記錄按學號從小到大排列。用起泡排序演算法實現
{

student *ptr,*s=head,*p;
int count=0,count1;
while(s)//統計鏈表結點個數
{
count++;
s=s->next;
}

for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr處於隊頭時
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr處於隊頭時
p=head;
else
p=p->next;
}
}
}
return;
}

void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}

int main()
{
int option;

printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n歡迎使用學生信息管理系統!\n");

//登錄模塊
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;

}
if(icheck==3)
{
printf("\n連續登錄三次不成功,退出!");
exit(0);
}

//系統界面

while(1)
{
printf("\n\n請選擇需要的服務:");
printf("\n1.注冊");
printf("\n2.查詢");
printf("\n3.修改");
printf("\n4.刪除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");

scanf("%d",&option);

switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}

}

return 0;

}

回答者: 493838148 - 七級 2010-6-12 11:27

檢舉 //我以前寫的
#include "stdio.h"
#include "math.h"
#define N 30

struct student
{
long int num;
char name[10];
char sex[3];
int Chinese,Math,English,total,average;
}stu[N]={{4001,"lks","m",100,100,100},{4002,"lyt","w",99,63,89},{4003,"asd","w",60,70,80},{4004,"fgh","m",41,100,98},
{4005,"asd","m",74,74,87},{4006,"yt","m",85,58,78},{4007,"qwe","w",74,100,87},{4008,"dcs","w",74,85,96},
{4009,"qfg","m",74,78,36},{4010,"gft","m",45,85,98},{4011,"mn","m",60,77,17},{4012,"yer","w",78,78,100},{4013,"lsd","m",100,89,85}
},s;
int M=13;
void modify(struct student stu[])
{
int t;
long num;
char z;
t=search(stu)-400;
printf("input num:");
scanf("%ld",&stu[t].num);
printf("input name:");
scanf("%s",stu[t].name);
printf("input sex:");
scanf("%s",stu[t].sex);
printf("input score of Chinese:");
scanf("%d",&stu[t].Chinese);
printf("input score of Math:");
scanf("%d",&stu[t].Math);
printf("input score of English:");
scanf("%d",&stu[t].English);
stu[t].average=(stu[t].English+stu[t].Math+stu[t].Chinese)/3;
stu[t].total=stu[t].English+stu[t].Math+stu[t].Chinese;
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[t].num);
printf(" %s\t",stu[t].name);
printf("%s\t",stu[t].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[t].Chinese,stu[t].Math,stu[t].English,stu[t].total,stu[t].average);
printf("Next?y/n???");
scanf("%s",&z);
if (z=='y')
modify(stu);
}
void output(struct student stu[])
{
int i;
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
for (i=0;i<M;i++)
{
printf("\t%4ld\t",stu[i].num);
printf(" %s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
}
}
void sort(struct student stu[])
{
int i,j,t;
printf("1.an yingyu chengcheji paixu\n2.an yuwen chengji paixu\n3.an shuxue chengji paixu\n4.an pingjue chengji paixu\n5.an zongfen paixu\n");
scanf("%d",&t);
switch (t)
{
case 1:
for (i=0;i<M-1;i++)
for (j=0;j<M-i-1;j++)
{
if (stu[j].English<stu[j+1].English)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case 2:
for (i=0;i<M-1;i++)
for (j=0;j<M-i-1;j++)
{
if (stu[j].Chinese<stu[j+1].Chinese)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case 3:
for (i=0;i<M-1;i++)
for (j=0;j<M-i-1;j++)
{
if (stu[j].Math<stu[j+1].Math)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case 4:
for (i=0;i<M-1;i++)
for (j=0;j<M-i-1;j++)
{
if (stu[j].average<stu[j+1].average)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
case 5:
for (i=0;i<M-1;i++)
for (j=0;j<M-i-1;j++)
{
if (stu[j].total<stu[j+1].total)
{
s=stu[j];
stu[j]=stu[j+1];
stu[j+1]=s;
}
}
output(stu);
getch();
break;
}
}
int search(struct student stu[])
{
long t,i,z,K='y';
char name[20];
printf("1.an xuehao chazhao\n2.an xingming chazhao\n");
scanf("%d",&z);
switch (z)
{
case 1:
printf("qing shuru xuehao:\n");
scanf("%ld",&t);
for (i=0;i<M;i++)
{
if (stu[i].num==t)
{
K='x';
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf(" %s\t",stu[i].name);
printf(" %s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%6d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
return(stu[i].num);
getche();
break;
}
}
if (K='y')
{
printf("No find");
getchar();
}
break;
case 2:
printf("qing shuru xingming:");
scanf("%s",name);
for (i=0;i<M;i++)
{
if (strcmp(stu[i].name,name)==0)
{
K='x';
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf(" %s\t",stu[i].name);
printf(" %s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%6d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
getche();
break;
}
}
if (K='y')
{
printf("No find");
getchar();
}
break;
}
}

void insert(struct student stu[])
{
int i;
char z='y';
for (i=M;i<=N&&z=='y';i++)
{
printf("input num:");
scanf("%ld",&stu[i].num);
printf("input name:");
scanf("%s",stu[i].name);
printf("input name:");
scanf("%s",stu[i].sex);
printf("input score of Chinese:");
scanf("%d",&stu[i].Chinese);
printf("input score of Math:");
scanf("%d",&stu[i].Math);
printf("input score of English:");
scanf("%d",&stu[i].English);
stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3;
stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese;
printf("Next?y/n???");
z=getche();
if (z!='y')
{
M=i+1;
sort(stu);
output(stu);
}
}
}
void delete(struct student stu[])
{
long t,i,z;
char l,name[20];
printf("1.an xuehao shanchu/n2.an xingming chanchu");
scanf("%d",&z);
switch (z)
{
case 1:
printf("qing shuru xuehao:");
scanf("%ld",&t);
for (i=0;i<M;i++)
{
if (stu[i].num==t)
{
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf(" %s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
break;
}
}
printf("Go on?y/n???");
scanf("%s",&l);
if (l=='y')
{
for (;i<M;i++)
{
stu[i]=stu[i+1];
}
stu[M-1].num=0;
output(stu);
}
else
break;
case 2:
printf("qing shuru xingming:");
scanf("%s",name);
for (i=0;i<M;i++)
{
if (strcmp(stu[i].name,name)==0)
{
printf("\tNUM\tNAME\tSEX\tCHINESE\tMATH\tENGLISH\tTOTAL\tAVERAGE\n");
printf("\t%4ld\t",stu[i].num);
printf(" %s\t",stu[i].name);
printf("%s\t",stu[i].sex);
printf("%4d\t%4d\t%4d\t%4d%8d\n",stu[i].Chinese,stu[i].Math,stu[i].English,stu[i].total,stu[i].average);
break;
}
}
printf("Go on?y/n???");
scanf("%s",&l);
if (l=='y')
{
for (;i<M;i++)
{
stu[i]=stu[i+1];
}
stu[M-1].num=0;
output(stu);
}
else
break;
}
}

main()
{
int choice,i;
clrscr();
for (i=0;i<M;i++)
{
stu[i].average=(stu[i].English+stu[i].Math+stu[i].Chinese)/3; ;
stu[i].total=stu[i].English+stu[i].Math+stu[i].Chinese;
}
for (;;)
{
printf("\n------ xuesheng chengji guanli xitong------\n");
printf("1.modify xuesheng jilu \n");
printf("2.output xuesheng jilu\n");
printf("3.sort xuesheng jilu\n");
printf("4.search xuesheng jilu\n");
printf("5.insert xuesheng jilu\n");
printf("6.delete xuesheng jilu\n");
printf("7. exit\n");
printf("pllease input(1-7):\n");
scanf("%d",&choice);
switch (choice)
{
case 1:
modify(stu);
break;
case 2:
output(stu);
break;
case 3:
sort(stu);
break;
case 4:
search(stu);
break;
case 5:
insert(stu);
break;
case 6:
delete(stu);
break;
case 7:
exit();
break;
}
}
getch();
}

9. c語言「學生成績管理系統」課程設計報告 我想知道要重新創建一個txt用來錄入學生成績么怎麼弄ns流程圖

我的這個程序不是所有的功能都能實現,我當初也是做的這個程序,我答辯時老師只是看了你的程序的運行情況,並沒有仔細看你的題目要求,只要能運行出來就可以了,這是那程序和流程圖,希望可以幫到你:

#include<stdio.h>

#include<string.h>

#defineN3

structstudent

{

intmath;

intnumber;

charname[20];

intlanguage;

intJN;

}student[4];

voidmain()

{

voidsave();/*對輸入的學生信息進行保存*/

voidload();/*將用戶輸入的學生信息讀入到(out.txt)中*/

voidinput();/*將學生的信息輸入進去*/

voidsum();/*對用戶輸入的學生成績進行求和*/

voidsearch();/*統計用戶輸入的學生成績中只要有於60分的人數和姓名*/

voidoutput();/*實現循環功能*/

intn;

printf(" ");

printf("學生成績管理 ");

printf(" ");

printf("1.錄入學生信息 ");

printf("2.瀏覽學生的平均分和總分 ");

printf("3.不及格的人數和姓名及科目 ");

printf("4.全班學生信息 ");

printf("5.退出 ");

printf("請輸入你的選擇 ");

printf(" ");

scanf("%d",&n);

switch(n)

{

case1:printf("輸入信息 ");printf(" ");input();main();break;

case2:printf("瀏覽學生的平均分和總分 ");printf(" ");sum();main();break;

case3:printf("不及格的人數和姓名 ");printf(" ");search();main();break;

case4:printf("全班學生信息 ");printf(" ");output();main();break;

default:break;

}

}

voidsave(intm)

{

inti;

FILE*fp;

if((fp=fopen("out.txt","wb"))==NULL) //在當前程序運行目錄下自動建立out.dat文件,用二進制打開

{

printf("打開文件出錯 ");

return;

}

for(i=0;i<m;i++)

if(fwrite(&student[i],sizeof(structstudent),1,fp)!=1)

printf("cuo ");

fclose(fp);

}

voidinput()

{

inti;

for(i=0;i<N;i++)

{

printf("請輸入學生的學號:");

scanf("%d",&student[i].number);

printf("請輸入姓名: ");

scanf("%s",student[i].name);

printf("請輸入數學成績: ");

scanf("%d",&student[i].math);

printf("請輸入c語言成績: ");

scanf("%d",&student[i].language);

printf("請輸入日語成績: ");

scanf("%d",&student[i].JN);

printf("請輸入你的選擇 ");

printf(" ");

}

printf(" 創建完畢! ");

save(N);

}

voidsum()

{ inti;intsum[N],ave[N];

for(i=0;i<N;i++)

{

sum[i]=student[i].math+student[i].language+student[i].JN;

ave[i]=sum[i]/3;

}

for(i=0;i<3;i++)

printf("第%d名學生的總分:%3d,平均分%d ",i+1,sum[i],ave[i]);

}

voidoutput()

{

inti;

for(i=0;i<N;i++)

{

printf("學生的學號%d:",student[i].number);

printf("姓名:%s ",student[i].name);

printf("數學成績:%d ",student[i].math);

printf("c語言成績:%d ",student[i].language);

printf("日語成績:%d ",student[i].JN);

printf(" ");

}

}

voidsearch()

{

inti,j=0;

for(i=0;i<N;i++)

if(student[i].math<50||student[i].language<50||student[i].JN<50)

{printf("姓名:%s ",student[i].name);j++;}

printf("不及格人數是%d",j);

}

voidload()

{

inti;

FILE*fp;

if((fp=fopen("out.txt","rb"))==NULL)

{ printf("打開文件出錯 ");

return;

}

for(i=0;i<4;i++)

if(fread(&student[i],sizeof(structstudent),1,fp)!=1)

{

if(feof(fp));

{fclose(fp);

return;}

printf("打開文件出錯 ");

}

fclose(fp);

10. 用C語言怎麼學生成績管理系統

#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[4];
int cgrade;
int mgrade;
int egrade;
int totle;
int ave;
char neartime[10];/* 最近更新時間 */
};

typedef struct node
{
struct student data;
struct node *next;
}Node,*Link;

void menu()
{
printf("********************************************************************************");
printf("\t1登記學生資料\t\t\t\t\t2刪除學生資料\n");
printf("\t3查詢學生資料\t\t\t\t\t4修改學生資料\n");
printf("\t5保存學生資料\t\t\t\t\t0退出系統\n");
printf("********************************************************************************\n");
}

void printstart()
{
printf("-----------------------------------------------------------------------\n");
}
void Wrong()
{
printf("\n=====>提示:輸入錯誤!\n");
}

void Nofind()
{
printf("\n=====>提示:沒有找到該學生!\n");
}

void printc() /* 本函數用於輸出中文 */
{
printf(" 學號\t 姓名 性別 英語成績 數學成績 C語言成績 總分 平均分\n");
}

void printe(Node *p)/* 本函數用於輸出英文 */
{
printf("%-12s%s\t%s\t%d\t%d\t%d\t %d\t %d\n",p->data.num,p->data.name,p->data.sex,p->data.egrade,p->data.mgrade,p->data.cgrade,p->data.totle,p->data.ave);
}

Node* Locate(Link l,char findmess[],char nameornum[]) /* 該函數用於定位連表中符合要求的接點,並返回該指針 */
{
Node *r;
if(strcmp(nameornum,"num")==0) /* 按學號查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.num,findmess)==0)
return r;
r=r->next;
}
}
else if(strcmp(nameornum,"name")==0) /* 按姓名查詢 */
{
r=l->next;
while(r!=NULL)
{
if(strcmp(r->data.name,findmess)==0)
return r;
r=r->next;
}
}
return 0;
}

void Add(Link l) /* 增加學生 */
{
Node *p,*r,*s;
char num[10];
r=l;
s=l->next;
while(r->next!=NULL)
r=r->next; /* 將指針置於最末尾 */
while(1)
{
printf("請你輸入學號(以'0'返回上一級菜單:)");
scanf("%s",num);
if(strcmp(num,"0")==0)
break;
while(s)
{
if(strcmp(s->data.num,num)==0)
{
printf("=====>提示:學號為'%s'的學生已經存在,若要修改請你選擇'4 修改'!\n",num);
printstart();
printc();
printe(s);
printstart();
printf("\n");
return;
}
s=s->next;
}

p=(Node *)malloc(sizeof(Node));

strcpy(p->data.num,num);
printf("請你輸入姓名:");
scanf("%s",p->data.name);
getchar();
printf("請你輸入性別:");
scanf("%s",p->data.sex);
getchar();
printf("請你輸入c語言成績:");
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入數學成績:");
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入英語成績:");
scanf("%d",&p->data.egrade);
getchar();
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle / 3;
/* 信息輸入已經完成 */
p->next=NULL;
r->next=p;
r=p;
shoudsave=1;

}
}

void Qur(Link l) /* 查詢學生 */
{
int sel;
char findmess[20];
Node *p;

if(!l->next)
{
printf("\n=====>提示:沒有資料可以查詢!\n");
return;

}
printf("\n=====>1按學號查找\n=====>2按姓名查找\n");
scanf("%d",&sel);
if(sel==1)/* 學號 */
{
printf("請你輸入要查找的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else if(sel==2) /* 姓名 */
{
printf("請你輸入要查找的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
printf("\t\t\t\t查找結果\n");
printstart();
printc();
printe(p);
printstart();
}
else
Nofind();
}
else
Wrong();

}

void Del(Link l) /* 刪除 */
{
int sel;
Node *p,*r;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以刪除!\n");
return;
}
printf("\n=====>1按學號刪除\n=====>2按姓名刪除\n");
scanf("%d",&sel);
if(sel==1)
{
printf("請你輸入要刪除的學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else if(sel==2)
{
printf("請你輸入要刪除的姓名:");
scanf("%s",findmess);
p=Locate(l,findmess,"name");
if(p)
{
r=l;
while(r->next!=p)
r=r->next;
r->next=p->next;
free(p);
printf("\n=====>提示:該學生已經成功刪除!\n");
shoudsave=1;
}
else
Nofind();
}
else
Wrong();
}

void Modify(Link l)
{
Node *p;
char findmess[20];
if(!l->next)
{
printf("\n=====>提示:沒有資料可以修改!\n");
return;
}
printf("請你輸入要修改的學生學號:");
scanf("%s",findmess);
p=Locate(l,findmess,"num");
if(p)
{
printf("請你輸入新學號(原來是%s):",p->data.num);
scanf("%s",p->data.num);
printf("請你輸入新姓名(原來是%s):",p->data.name);
scanf("%s",p->data.name);
getchar();
printf("請你輸入新性別(原來是%s):",p->data.sex);
scanf("%s",p->data.sex);
printf("請你輸入新的c語言成績(原來是%d分):",p->data.cgrade);
scanf("%d",&p->data.cgrade);
getchar();
printf("請你輸入新的數學成績(原來是%d分):",p->data.mgrade);
scanf("%d",&p->data.mgrade);
getchar();
printf("請你輸入新的英語成績(原來是%d分):",p->data.egrade);
scanf("%d",&p->data.egrade);
p->data.totle=p->data.egrade+p->data.cgrade+p->data.mgrade;
p->data.ave=p->data.totle/3;
printf("\n=====>提示:資料修改成功!\n");
shoudsave=1;
}
else
Nofind();

}

void Disp(Link l)
{
int count=0;
Node *p;
p=l->next;

if(!p)
{
printf("\n=====>提示:沒有資料可以顯示!\n");
return;
}
printf("\t\t\t\t顯示結果\n");
printstart();
printc();
printf("\n");
while(p)
{
printe(p);
p=p->next;
}
printstart();
printf("\n");
}

void Tongji(Link l)
{
Node *pm,*pe,*pc,*pt,*pa; /* 用於指向分數最高的接點 */
Node *r=l->next;
if(!r)
{
printf("\n=====>提示:沒有資料可以統計!\n");
return ;
}
pm=pe=pc=pt=pa=r;
while(r!=NULL)
{
if(r->data.cgrade>=pc->data.cgrade)
pc=r;
if(r->data.mgrade>=pm->data.mgrade)
pm=r;
if(r->data.egrade>=pe->data.egrade)
pe=r;
if(r->data.totle>=pt->data.totle)
pt=r;
if(r->data.ave>=pa->data.ave)
pa=r;

r=r->next;
}
printf("------------------------------統計結果--------------------------------\n");
printf("總分最高者:\t%s %d分\n",pt->data.name,pt->data.totle);
printf("平均分最高者:\t%s %d分\n",pa->data.name,pa->data.ave);

printf("英語最高者:\t%s %d分\n",pe->data.name,pe->data.egrade);
printf("數學最高者:\t%s %d分\n",pm->data.name,pm->data.mgrade);
printf("c語言最高者:\t%s %d分\n",pc->data.name,pc->data.cgrade);
printstart();
}

void Sort(Link l)
{
Link ll;
Node *p,*rr,*s;

ll=(Link)malloc(sizeof(Node)); /* 用於做新的連表 */
ll->next=NULL;

if(l->next==NULL)
{
printf("\n=====>提示:沒有資料可以排序!\n");
return ;
}
p=l->next;
while(p)
{
s=(Node*)malloc(sizeof(Node)); /* 新建接點用於保存信息 */
s->data=p->data;
s->next=NULL;

rr=ll;
while(rr->next!=NULL && rr->next->data.totle>=p->data.totle)
rr=rr->next;
if(rr->next==NULL)
rr->next=s;
else
{
s->next=rr->next;
rr->next=s;
}
p=p->next;
}
free(l);
l->next=ll->next;
printf("\n=====>提示:排序已經完成!\n");
}

void Save(Link l)
{
FILE* fp;
Node *p;
int flag=1,count=0;
fp=fopen("c:\\student","wb");
if(fp==NULL)
{
printf("\n=====>提示:重新打開文件時發生錯誤!\n");
exit(1);
}
p=l->next;

while(p)
{
if(fwrite(p,sizeof(Node),1,fp)==1)
{
p=p->next;
count++;
}
else
{
flag=0;
break;
}
}
if(flag)
{
printf("\n=====>提示:文件保存成功.(有%d條記錄已經保存.)\n",count);
shoudsave=0;
}
fclose(fp);
}

void main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;

int count=0;
Node *p,*r;
printf("\t\t\t\t學生成績管理系統\n\t\t\t\t-------福建農業職業學院計應0501 黃歡(32號)\n");
l=(Node*)malloc(sizeof(Node));
l->next=NULL;
r=l;

fp=fopen("C:\\student","rb");
if(fp==NULL)
{
printf("\n=====>提示:文件還不存在,是否創建?(y/n)\n");
scanf("%c",&jian);
if(jian=='y'||jian=='Y')
fp=fopen("C:\\student","wb");
else
exit(0);
}
printf("\n=====>提示:文件已經打開,正在導入記錄......\n");

while(!feof(fp))
{
p=(Node*)malloc(sizeof(Node));
if(fread(p,sizeof(Node),1,fp)) /* 將文件的內容放入接點中 */
{
p->next=NULL;
r->next=p;
r=p; /* 將該接點掛入連中 */
count++;
}
}

fclose(fp); /* 關閉文件 */
printf("\n=====>提示:記錄導入完畢,共導入%d條記錄.\n",count);

while(1)
{
menu();
printf("請你選擇操作:");
scanf("%d",&sel);

if(sel==0)
{
if(shoudsave==1)
{ getchar();
printf("\n=====>提示:資料已經改動,是否將改動保存到文件中(y/n)?\n");
scanf("%c",&ch);
if(ch=='y'||ch=='Y')
Save(l);
}
printf("\n=====>提示:你已經退出系統,再見!\n");
break;
}
switch(sel)
{
case 1:Add(l);break; /* 增加學生 */
case 2:Del(l);break;/* 刪除學生 */
case 3:Qur(l);break;/* 查詢學生 */
case 4:Modify(l);break;/* 修改學生 */
case 5:Save(l);break;/* 保存學生 */
case 9:printf("\t\t\t==========幫助信息==========\n");break;
default: Wrong();getchar();break;
}
}
}
/* */

/*
學生成績管理程序
編制一個統計學生考試分數的管理程序。
設學生成績已以一個學生一個記錄的形式存儲在文件中,
每位學生記錄包含的信息有:姓名,學號和各門功課的成績。
程序具有以下幾項功能:求出各門課程的總分,平均分,按姓名,
按學號尋找其記錄並顯示,瀏覽全部學生成績和按總分由高到低顯示學生信息等。
*/

#include <stdio.h>
#define SWN 3 /* 課程數 */
#define NAMELEN 20 /* 姓名最大字元數 */
#define CODELEN 10 /* 學號最大字元數 */
#define FNAMELEN 80 /* 文件名最大字元數 */
#define BUFLEN 80 /* 緩沖區最大字元數 */
/* 課程名稱表 */
char schoolwork[SWN][NAMELEN+1] = {"Chinese","Mathematic","English"};
struct record
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
}stu;

struct node
{
char name[NAMELEN+1]; /* 姓名 */
char code[CODELEN+1]; /* 學號 */
int marks[SWN]; /* 各課程成績 */
int total; /* 總分 */
struct node *next; /* 後續表元指針 */
}*head; /* 鏈表首指針 */

int total[SWN]; /* 各課程總分 */
FILE *stfpt; /* 文件指針 */
char stuf[FNAMELEN]; /* 文件名 */

/* 從指定文件讀入一個記錄 */
int readrecord(FILE *fpt,struct record *rpt)
{
char buf[BUFLEN];
int i;
if(fscanf(fpt,"%s",buf)!=1)
return 0; /* 文件結束 */
strncpy(rpt->name,buf,NAMELEN);
fscanf(fpt,"%s",buf);
strncpy(rpt->code,buf,CODELEN);
for(i=0;i<SWN;i++)
fscanf(fpt,"%d",&rpt->marks[i]);
for(rpt->total=0,i=0;i<SWN;i++)
rpt->total+=rpt->marks[i];
return 1;
}
/* 對指定文件寫入一個記錄 */
writerecord(FILE *fpt,struct record *rpt)
{
int i;
fprintf(fpt,"%s\n",rpt->name);
fprintf(fpt,"%s\n",rpt->code);
for(i=0;i<SWN;i++)
fprintf(fpt,"%d\n",rpt->marks[i]);
return ;
}

/* 顯示學生記錄 */
displaystu(struct record *rpt)
{
int i;
printf("\nName : %s\n",rpt->name);
printf("Code : %s\n",rpt->code);
printf("Marks :\n");
for(i=0;i<SWN;i++)
printf(" %-15s : %4d\n",schoolwork[i],rpt->marks[i]);
printf("Total : %4d\n",rpt->total);
}

/* 計算各單科總分 */
int totalmark(char *fname)
{
FILE *fp;
struct record s;
int count,i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
for(i=0;i<SWN;i++)
total[i]=0;
count=0;
while(readrecord(fp,&s)!=0)
{
for(i=0;i<SWN;i++)
total[i]+=s.marks[i];
count++;
}
fclose(fp);
return count; /* 返回記錄數 */
}

/* 列表顯示學生信息 */
void liststu(char *fname)
{
FILE *fp;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return ;
}
while(readrecord(fp,&s)!=0)
{
displaystu(&s);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
}
fclose(fp);
return;
}

/* 構造鏈表 */
struct node *makelist(char *fname)
{
FILE *fp;
struct record s;
struct node *p,*u,*v,*h;
int i;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return NULL;
}
h=NULL;
p=(struct node *)malloc(sizeof(struct node));
while(readrecord(fp,(struct record *)p)!=0)
{
v=h;
while(v&&p->total<=v->total)
{
u=v;
v=v->next;
}
if(v==h)
h=p;
else
u->next=p;
p->next=v;
p=(struct node *)malloc(sizeof(struct node));
}
free(p);
fclose(fp);
return h;
}

/* 順序顯示鏈表各表元 */
void displaylist(struct node *h)
{
while(h!=NULL)
{
displaystu((struct record *)h);
printf("\n Press ENTER to continue...\n");
while(getchar()!='\n');
h=h->next;
}
return;
}
/* 按學生姓名查找學生記錄 */
int retrievebyn(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.name,key)==0)
{
displaystu(&s);
c++;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

/* 按學生學號查找學生記錄 */
int retrievebyc(char *fname, char *key)
{
FILE *fp;
int c;
struct record s;
if((fp=fopen(fname,"r"))==NULL)
{
printf("Can't open file %s.\n",fname);
return 0;
}
c=0;
while(readrecord(fp,&s)!=0)
{
if(strcmp(s.code,key)==0)
{
displaystu(&s);
c++;
break;
}
}
fclose(fp);
if(c==0)
printf("The student %s is not in the file %s.\n",key,fname);
return 1;
}

main()
{
int i,j,n;
char c;
char buf[BUFLEN];
FILE *fp;
struct record s;
clrscr();
printf("Please input the students marks record file's name: ");
scanf("%s",stuf);
if((fp=fopen(stuf,"r"))==NULL)
{
printf("The file %s doesn't exit, do you want to creat it? (Y/N) ",stuf);
getchar();
c=getchar();
if(c=='Y'||c=='y')
{
fp=fopen(stuf,"w");
printf("Please input the record number you want to write to the file: ");
scanf("%d",&n);
for(i=0;i<n;i++)
{
printf("Input the student's name: ");
scanf("%s",&s.name);
printf("Input the student's code: ");
scanf("%s",&s.code);
for(j=0;j<SWN;j++)
{
printf("Input the %s mark: ",schoolwork[j]);
scanf("%d",&s.marks[j]);
}
writerecord(fp,&s);
}
fclose(fp);
}
}
fclose(fp);
getchar();
/*clrscr();*/
puts("Now you can input a command to manage the records.");
puts("m : mean of the marks.");
puts("t : total of the marks.");
puts("n : search record by student's name.");
puts("c : search record by student's code.");
puts("l : list all the records.");
puts("s : sort and list the records by the total.");
puts("q : quit!");
while(1)
{
puts("Please input command:");
scanf(" %c",&c); /* 輸入選擇命令 */
if(c=='q'||c=='Q')
{
puts("\n Thank you for your using.");
break; /* q,結束程序運行 */
}
switch(c)
{
case 'm': /* 計算平均分 */
case 'M':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's average is: %.2f.\n",schoolwork[i],(float)total[i]/n);
break;
case 't': /* 計算總分 */
case 'T':
if((n=totalmark(stuf))==0)
{
puts("Error!");
break;
}
printf("\n");
for(i=0;i<SWN;i++)
printf("%-15s's total mark is: %d.\n",schoolwork[i],total[i]);
break;
case 'n': /* 按學生的姓名尋找記錄 */
case 'N':
printf("Please input the student's name you want to search: ");
scanf("%s",buf);
retrievebyn(stuf,buf);
break;
case 'c': /* 按學生的學號尋找記錄 */
case 'C':
printf("Please input the student's code you want to search: ");
scanf("%s",buf);
retrievebyc(stuf,buf);
break;
case 'l': /* 列出所有學生記錄 */
case 'L':
liststu(stuf);
break;
case 's': /* 按總分從高到低排列顯示 */
case 'S':
if((head=makelist(stuf))!=NULL)
displaylist(head);
break;
default: break;
}
}
}