vs寫的c學生成績管理系統下載
A. C語言編寫一個簡單的學生成績管理系統
C語言程序:
#include<stdio.h>
#include<string.h>
typedefstructstudent
{
charname[20]; /*姓名*/
intcode; /*學號*/
intkor,eng,math; /*3門課程的成績*/
}STUDENT;
/*返回輸入數據*/
STUDENTInput();
/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt);
/*將輸入分數轉換為A-F*/
chargrade(intscore);
intmain()
{
STUDENTS[10];
intcnt=0,select;
inti,j;
intcode;
while(1)
{
printf(" 學生信息管理系統 ");
printf(" 1 添加 ");
printf(" 2 刪除 ");
printf(" 3 查詢 ");
printf(" 0 結束 ");
printf(" 您的選擇[0-3]:");
scanf("%d",&select);
if(select<0||select>3)
continue;
if(select==0)
{
printf("退出系統! ");
break;
}
if(select==1) /*添加*/
{
S[cnt++]=Input();
}
elseif(select==2) /*刪除*/
{
printf(" 待刪除學生的學號:");
scanf("%d",&code);
for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,刪除失敗! ");
}
else{
for(j=i+1;j<cnt;j++)
{
strcpy(S[j-1].name,S[j].name);
S[j-1].code=S[j].code;
S[j-1].kor=S[j].kor;
S[j-1].eng=S[j].eng;
S[j-1].math=S[j].math;
}
cnt--;
printf("刪除成功! ");
}
}
else /*查詢*/
{
printf(" 待查找學生的學號:");
scanf("%d",&code);
for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,查找失敗! ");
}
else
{
printf(" 查詢結果: ");
Output(S,i);
}
}
}
return0;
}
/*返回輸入數據*/
STUDENTInput()
{
STUDENTstu;
printf(" 新學生信息 ");
printf(" 學號:");
scanf("%d",&stu.code);
printf(" 姓名:");
getchar();
gets(stu.name);
printf(" 3門課程成績(以空格分隔):");
scanf("%d%d%d",&stu.kor,&stu.eng,&stu.math);
returnstu;
}
/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt)
{
printf("學號:%d ",info[cnt].code);
printf("姓名:");
puts(info[cnt].name);
printf("成績:%c%c%c ",grade(info[cnt].kor),grade(info[cnt].eng),grade(info[cnt].math));
}
/*將輸入分數轉換為A-F*/
chargrade(intscore)
{
if(score<0||score>100)
return'F';
if(score>=90)
return'A';
if(score>=80)
return'B';
if(score>=70)
return'C';
if(score>=60)
return'D';
else
return'E';
}
運行測試:
B. 怎麼用c語言編寫一個學生成績管理系統啊急……
C語言課程設計報告-------學生成績簡單管理程序 一、系統菜單的主要功能 (1)輸入若干條記錄 (2)顯示所有記錄 (3)按學號排序 (4)插入一條記錄 (5)按姓名查找,刪除一條記錄 (6)查找並顯示一條記錄 (7)輸出統計信息 (新增) (8)從正文中添加數據到結構體數組中 (9)將所有數據寫入文件中 (0)退出程序 二、題目分析 該題主要考察學生對結構體,指針,文件的操作,以及C語言演算法的掌握,所以完成此道題目要求較強的設計能力,尤其是要有一種大局觀的意識。如何調程序也非常重要,通過這個程序可以學習到以前調試短程序沒有的的經驗。 菜單中的每一個選項都對應一個子程序,子程序的演算法幾乎囊獲了所有C語言學過的技巧,下面就各個子程序中的功能進行說明: 功能1和4的演算法相似,輸入一條記錄到結構體中去,其中有一部很關鍵,就是通過gets將所有的多餘的字元,回車讀去,否則就會出錯。 功能2是顯示所有的記錄,通過循環輸出,格式也比較重要。 功能3為按學號排序,因為學號定義成了字元數組的形式,因此在運用冒泡法進行排序的時候,要用到strcmp,strcpy等函數。 功能5為按姓名刪除記錄,先輸入姓名,再一一比較,如果沒有則返回失敗信息,如果找到就將此記錄都向前移一位,返回n-1。 功能6的演算法在5中就已經體現了,輸入姓名,一一比較。 功能7為新增的功能,因為考慮到原來給出的函數中竟然沒有對學生成績的統計功能,因此新增此功能,可以得出所有的記錄個數,最高、最低、平均分,並輸出相關的學生信息等。 功能8和9是對文件的操作,提前准備好數據。 三、程序正文部分 #include<stdio.h> /*引用庫函數*/ #include<stdlib.h> #include<ctype.h> #include<string.h> typedef struct /*定義結構體數組*/ { char num[10]; /*學號*/ char name[20]; /*姓名*/ int score; /*成績*/ }Student; Student stu[80]; /*結構體數組變數*/ int menu_select() /*菜單函數*/ { char c; do{ system("cls"); /*運行前清屏*/ printf("\t\t****Students' Grade Management System****\n"); /*菜單選擇*/ printf("\t\t | 1. Input Records |\n"); printf("\t\t | 2. Display All Records |\n"); printf("\t\t | 3. Sort |\n"); printf("\t\t | 4. Insert a Record |\n"); printf("\t\t | 5. Delete a Record |\n"); printf("\t\t | 6. Query |\n"); printf("\t\t | 7. Statistic |\n"); printf("\t\t | 8. Add Records from a Text File|\n"); printf("\t\t | 9. Write to a Text file |\n"); printf("\t\t | 0. Quit |\n"); printf("\t\t*****************************************\n"); printf("\t\t\tGive your Choice(0-9):"); c=getchar(); /*讀入選擇*/ }while(c<'0'||c>'9'); return(c-'0'); /*返回選擇*/ } int Input(Student stud[],int n) /*輸入若干條記錄*/ {int i=0; char sign,x[10]; /*x[10]為清除多餘的數據所用*/ while(sign!='n'&&sign!='N') /*判斷*/ { printf("\t\t\tstudent's num:"); /*交互輸入*/ scanf("\t\t\t%s",stud[n+i].num); printf("\t\t\tstudent's name:"); scanf("\t\t\t%s",stud[n+i].name); printf("\t\t\tstudent's score:"); scanf("\t\t\t%d",&stud[n+i].score); gets(x); /*清除多餘的輸入*/ printf("\t\t\tany more records?(Y/N)"); scanf("\t\t\t%c",&sign); /*輸入判斷*/ i++; } return(n+i); } void Display(Student stud[],int n) /*顯示所有記錄*/ { int i; printf("\t\t\t-----------------------------------\n"); /*格式頭*/ printf("\t\t\tnumber name score\n"); printf("\t\t\t-----------------------------------\n"); for(i=1;i<n+1;i++) /*循環輸入*/ { printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score); if(i>1&&i%10==0) /*每十個暫停*/ {printf("\t\t\t-----------------------------------\n"); /*格式*/ printf("\t\t\t"); system("pause"); printf("\t\t\t-----------------------------------\n"); } } printf("\t\t\t"); system("pause"); } void Sort_by_num(Student stud[],int n) /*按學號排序*/ { int i,j,*p,*q,s; char t[10]; for(i=0;i<n-1;i++) /*冒泡法排序*/ for(j=0;j<n-1-i;j++) if(strcmp(stud[j].num,stud[j+1].num)>0) {strcpy(t,stud[j+1].num); strcpy(stud[j+1].num,stud[j].num); strcpy(stud[j].num,t); strcpy(t,stud[j+1].name); strcpy(stud[j+1].name,stud[j].name); strcpy(stud[j].name,t); p=&stud[j+1].score; q=&stud[j].score; s=*p; *p=*q; *q=s; } } int Insert_a_record(Student stud[],int n) /*插入一條記錄*/ {char x[10]; /*清除多餘輸入所用*/ printf("\t\t\tstudent's num:"); /*互動式輸入*/ scanf("\t\t\t%s",stud[n].num); printf("\t\t\tstudent's name:"); scanf("\t\t\t%s",stud[n].name); printf("\t\t\tstudent's score:"); scanf("\t\t\t%d",&stud[n].score); gets(x); n++; Sort_by_num(stud,n); /*調用排序函數*/ printf("\t\t\tInsert Successed!\n"); /*返回成功信息*/ return(n); } int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/ { char s[20]; int i=0,j; printf("\t\t\ttell me his(her) name:"); /*互動式問尋*/ scanf("%s",s); while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/ if(i==n) { printf("\t\t\tnot find!\n"); /*返回失敗信息*/ return(n); } for(j=i;j<n-1;j++) /*刪除操作*/ { strcpy(stud[j].num,stud[j+1].num); strcpy(stud[j].name,stud[j+1].name); stud[j].score=stud[j+1].score; } printf("\t\t\tDelete Successed!\n"); /*返回成功信息*/ return(n-1); } void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/ { char s[20]; int i=0; printf("\t\t\tinput his(her) name:"); /*互動式輸入*/ scanf("\t\t\t%s",s); while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/ if(i==n) { printf("\t\t\tnot find!\n"); /*輸入失敗信息*/ return; } printf("\t\t\this(her) number:%s\n",stud[i].num); /*輸出該學生信息*/ printf("\t\t\this(her) score:%d\n",stud[i].score); } void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/ { int i,j=0,k=0,sum=0; float aver; /*成績平均值*/ for(i=0;i<n;i++) /*循環輸入判斷*/ { sum+=stud[i].score; if(stud[j].score>stud[i].score) j=i; if(stud[k].score<stud[i].score) k=i; } aver=1.0*sum/n; printf("\t\t\tthere are %d records.\n",n); /*總共記錄數*/ printf("\t\t\tthe hignest score:\n"); /*最高分*/ printf("\t\t\tnumber:%s name:%s score:%d\n",stud[j].num,stud[j].name,stud[j].score); printf("\t\t\tthe lowest score:\n"); /*最低分*/ printf("\t\t\tnumber:%s name:%s score:%d\n",stud[k].num,stud[k].name,stud[k].score); printf("\t\t\tthe average score is %5.2f\n",aver); /*平均分*/ } int AddfromText(Student stud[],int n) /*從文件中讀入數據*/ { int i=0,num; FILE *fp; /*定義文件指針*/ char filename[20]; /*定義文件名*/ printf("\t\t\tInput the filename:"); scanf("\t\t\t%s",filename); /*輸入文件名*/ if((fp=fopen(filename,"rb"))==NULL) /*打開文件*/ { printf("\t\t\tcann't open the file\n"); /*打開失敗信息*/ printf("\t\t\t"); system("pause"); return(n); } fscanf(fp,"%d",&num); /*讀入總記錄量*/ while(i<num) /*循環讀入數據*/ { fscanf(fp,"%s%s%d",stud[n+i].num,stud[n+i].name,&stud[n+i].score); i++; } n+=num; fclose(fp); /*關閉文件*/ printf("\t\t\tSuccessed!\n"); printf("\t\t\t"); system("pause"); return(n); } void WritetoText(Student stud[],int n) /*將所有記錄寫入文件*/ { int i=0; FILE *fp; /*定義文件指針*/ char filename[20]; /*定義文件名*/ printf("\t\t\tWrite Records to a Text File\n"); /*輸入文件名*/ printf("\t\t\tInput the filename:"); scanf("\t\t\t%s",filename); if((fp=fopen(filename,"w"))==NULL) /*打開文件*/ { printf("\t\t\tcann't open the file\n"); system("pause"); return; } fprintf(fp,"%d\n",n); /*循環寫入數據*/ while(i<n) { fprintf(fp,"%-16s%-15s%d\n",stud[i].num,stud[i].name,stud[i].score); i++; } fclose(fp); /*關閉文件*/ printf("Successed!\n"); /*返回成功信息*/ } void main() /*主函數*/ { int n=0; for(;;) { switch(menu_select()) /*選擇判斷*/ { case 1: printf("\t\t\tInput Records\n"); /*輸入若干條記錄*/ n=Input(stu,n); break; case 2: printf("\t\t\tDisplay All Records\n"); /*顯示所有記錄*/ Display(stu,n); break; case 3: printf("\t\t\tSort\n"); Sort_by_num(stu,n); /*按學號排序*/ printf("\t\t\tSort Suceessed!\n"); printf("\t\t\t"); system("pause"); break; case 4: printf("\t\t\tInsert a Record\n"); n=Insert_a_record(stu,n); /*插入一條記錄*/ printf("\t\t\t"); system("pause"); break; case 5: printf("\t\t\tDelete a Record\n"); n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/ printf("\t\t\t"); system("pause"); break; case 6: printf("\t\t\tQuery\n"); Query_a_record(stu,n); /*查找並顯示一個記錄*/ printf("\t\t\t"); system("pause"); break; case 7: printf("\t\t\tStatistic\n"); Statistic(stu,n); /*新增功能,輸出統計信息*/ printf("\t\t\t"); system("pause"); break; case 8: printf("\t\t\tAdd Records from a Text File\n"); n=AddfromText(stu,n); /*新增功能,輸出統計信息*/ break; case 9: printf("\t\t\tWrite to a Text file\n"); WritetoText(stu,n); /*循環寫入數據*/ printf("\t\t\t"); system("pause"); break; case 0: printf("\t\t\tHave a Good Luck,Bye-bye!\n"); /*結束程序*/ printf("\t\t\t"); system("pause"); exit(0); } } } 四、函數調用關系圖 註:「→」代表調用 Input函數 列印鏈表記錄 Display函數 輸入若干條記錄 menu_select()函數 選擇菜單 Sort_by_num函數 顯示所有記錄 Delete_a_record函數 按姓名查找,刪除一條記錄 Query_a_record查找並顯示一條記錄 Statistic函數 輸出統計信息 (新增) AddfromText函數 從正文中添加數據到結構體數組中 Main函數 Insert_a_record插入一條記錄 WritetoText函數 將所有數據寫入文件中 退出程序 Reverse(head)函數 按學號排序 五、設計測試流程 1、進入界面 2、輸入選項1,回車; 按提示輸入數據: 3、回到主菜單; 輸入選項7,回車; 輸入文件名:data.txt,回車; 出現成功提示,則讀入文件操作成功。 4、回到主菜單,輸入2,回車 每10個暫停顯示數據 5、回到主菜單,輸入3,回車 出現排序成功信息。 6、回到主菜單,輸入4,回車 按提示插入一組數據 7、回到主菜單,輸入5,回車 按提示輸入姓名,刪除數據 出現刪除成功的信息 8、回到主菜單,輸入6,回車 輸入姓名進行查詢 9、回到主菜單,輸入7,回車 出現統計信息 10、回到主菜單,輸入9,回車 輸入result.txt,回車 出現成功寫入文件的信息 11、回到主菜單,輸入0,回車退出系統
C. 學生成績管理系統用這個Microsoft Visual C++ 6.0寫
告訴我郵箱發給你
D. 用C語言設計一個學生成績管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定義學生成績信息結構*/
struct stu
{
char id[8];
char name[8];
(4)vs寫的c學生成績管理系統下載擴展閱讀:
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)
復雜類型關鍵字
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標准新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)
E. 求幫忙用vs2012編寫一個學生成績管理系統。
控制台的忘的差不多了,帶界面的還可以
F. c語言編寫一個學生成績管理系統 源碼
/*菜單函數,返回值為整數*/
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); /*返回頭指針*/
}
/*查找記錄*/
void search(STUDENT *h)
{
STUDENT *p; /* 移動指針*/
char s[15]; /*存放姓名的字元數組*/
clrscr(); /*清屏幕*/
printf("please enter name for search\n");
scanf("%s",s); /*輸入姓名*/
p=h; /*將頭指針賦給p*/
while(strcmp(p->name,s)&&p!=NULL) /*當記錄的姓名不是要找的,或指針不為空時*/
p=p->next; /*移動指針,指向下一結點*/
if(p==NULL) /*如果指針為空*/
printf("\nlist no %s student\n",s); /*顯示沒有該學生*/
else /*顯示找到的記錄信息*/
{
printf("\n\n*****************************havefound***************************\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");
}
}
/*插入記錄*/
STUDENT *insert(STUDENT *h)
{
STUDENT *p,*q,*info; /*p指向插入位置,q是其前驅,info指新插入記錄*/
char s[11]; /*保存插入點位置的學號*/
int s1,i;
printf("please enter location before the no\n");
scanf("%s",s); /*輸入插入點學號*/
printf("\nplease new record\n"); /*提示輸入記錄信息*/
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*如沒有申請到,內存溢出*/
return NULL; /*返回空指針*/
}
inputs("enter no:",info->no,11); /*輸入學號*/
inputs("enter name:",info->name,15); /*輸入姓名*/
printf("please input %d score \n",N); /*提示輸入分數*/
s1=0; /*保存新記錄的總分,初值為0*/
for(i=0;i<N;i++) /*N門課程循環N次輸入成績*/
{
do{ /*對數據進行驗證,保證在0~100之間*/
printf("score%d:",i+1);
scanf("%d",&info->score[i]);
if(info->score[i]>100||info->score[i]<0)
printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0);
s1=s1+info->score[i]; /*計算總分*/
}
info->sum=s1; /*將總分存入新記錄中*/
info->average=(float)s1/N; /*計算均分*/
info->order=0; /*名次賦值0*/
info->next=NULL; /*設後繼指針為空*/
p=h; /*將指針賦值給p*/
q=h; /*將指針賦值給q*/
while(strcmp(p->no,s)&&p!=NULL) /*查找插入位置*/
{
q=p; /*保存指針p,作為下一個p的前驅*/
p=p->next; /*將指針p後移*/
}
if(p==NULL) /*如果p指針為空,說明沒有指定結點*/
if(p==h) /*同時p等於h,說明鏈表為空*/
h=info; /*新記錄則為頭結點*/
else
q->next=info; /*p為空,但p不等於h,將新結點插在表尾*/
else
if(p==h) /*p不為空,則找到了指定結點*/
{
info->next=p; /*如果p等於h,則新結點插入在第一個結點之前*/
h=info; /*新結點為新的頭結點*/
}
else
{
info->next=p; /*不是頭結點,則是中間某個位置,新結點的後繼為p*/
q->next=info; /*新結點作為q的後繼結點*/
}
printf("\n ----have inserted %s student----\n",info->name); printf("---Don't forget save---\n"); /*提示存檔*/
return(h); /*返回頭指針*/
}
/*保存數據到文件*/
void save(STUDENT *h)
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *p; /* 定義移動指針*/
char outfile[10]; /*保存輸出文件名*/
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示文件名格式信息*/
scanf("%s",outfile);
if((fp=fopen(outfile,"wb"))==NULL) /*為輸出打開一個二進制文件,如沒有則建立*/
{
printf("can not open file\n");
exit(1);
}
printf("\nSaving file......\n"); /*打開文件,提示正在保存*/
p=h; /*移動指針從頭指針開始*/
while(p!=NULL) /*如p不為空*/
{
fwrite(p,sizeof(STUDENT),1,fp);/*寫入一條記錄*/
p=p->next; /*指針後移*/
}
fclose(fp); /*關閉文件*/
printf("-----save success!!-----\n"); /*顯示保存成功*/
}
/* 從文件讀數據*/
STUDENT *load()
{
STUDENT *p,*q,*h=NULL; /*定義記錄指針變數*/
FILE *fp; /* 定義指向文件的指針*/
char infile[10]; /*保存文件名*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"rb"))==NULL) /*打開一個二進制文件,為讀方式*/
{
printf("can not open file\n"); /*如不能打開,則結束程序*/
exit(1);
}
printf("\n -----Loading file!-----\n");
p=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!p)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h; /*返回空頭指針*/
}
h=p; /*申請到空間,將其作為頭指針*/
while(!feof(fp)) /*循環讀數據直到文件尾結束*/
{
if(1!=fread(p,sizeof(STUDENT),1,fp))
break; /*如果沒讀到數據,跳出循環*/
p->next=(STUDENT *)malloc(sizeof(STUDENT)); /*為下一個結點申請空間*/
if(!p->next)
{
printf("out of memory!\n"); /*如沒有申請到,則內存溢出*/
return h;
}
q=p; /*保存當前結點的指針,作為下一結點的前驅*/
p=p->next; /*指針後移,新讀入數據鏈到當前表尾*/
}
q->next=NULL; /*最後一個結點的後繼指針為空*/
fclose(fp); /*關閉文件*/
printf("---You have success read data from file!!!---\n");
return h; /*返回頭指針*/
}
/*追加記錄到文件*/
void append()
{
FILE *fp; /*定義指向文件的指針*/
STUDENT *info; /*新記錄指針*/
int s1,i;
char infile[10]; /*保存文件名*/
printf("\nplease new record\n");
info=(STUDENT *)malloc(sizeof(STUDENT)); /*申請空間*/
if(!info)
{
printf("\nout of memory"); /*沒有申請到,內存溢出本函數結束*/
return ;
}
inputs("enter no:",info->no,11); /*調用inputs輸入學號*/
inputs("enter name:",info->name,15); /*調用inputs輸入姓名*/
printf("please input %d score \n",N); /*提示輸入成績*/
s1=0;
for(i=0;i<N;i++)
{
do{
printf("score%d:",i+1);
scanf("%d",&info->score[i]); /*輸入成績*/
if(info->score[i]>100||info->score[i]<0)printf("bad data,repeat input\n");
}while(info->score[i]>100||info->score[i]<0); /*成績數據驗證*/
s1=s1+info->score[i]; /*求總分*/
}
info->sum=s1; /*保存總分*/
info->average=(float)s1/N; /*求均分*/
info->order=0; /*名次初始值為0*/
info->next=NULL; /*將新記錄後繼指針賦值為空*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n"); scanf("%s",infile); /*輸入文件名*/
if((fp=fopen(infile,"ab"))==NULL) /*向二進制文件尾增加數據方式打開文件*/
{
printf("can not open file\n"); /*顯示不能打開*/
exit(1); /*退出程序*/
}
printf("\n -----Appending record!-----\n");
if(1!=fwrite(info,sizeof(STUDENT),1,fp)) /*寫文件操作*/
{
printf("-----file write error!-----\n");
return; /*返回*/
}
printf("-----append sucess!!----\n");
fclose(fp); /*關閉文件*/
}
/*文件拷貝*/
void ()
{
char outfile[10],infile[10];
FILE *sfp,*tfp; /*源和目標文件指針*/
STUDENT *p=NULL; /*移動指針*/
clrscr(); /*清屏*/
printf("Enter infile name,for example c:\\f1\\te.txt:\n");
scanf("%s",infile); /*輸入源文件名*/
if((sfp=fopen(infile,"rb"))==NULL) /*二進制讀方式打開源文件*/
{
printf("can not open input file\n");
exit(0);
}
printf("Enter outfile name,for example c:\\f1\\te.txt:\n"); /*提示輸入目標文件名*/
scanf("%s",outfile); /*輸入目標文件名*/
if((tfp=fopen(outfile,"wb"))==NULL) /*二進制寫方式打開目標文件*/
{
printf("can not open output file \n");
exit(0);
}
while(!feof(sfp)) /*讀文件直到文件尾*/
{
if(1!=fread(p,sizeof(STUDENT),1,sfp))
break; /*塊讀*/
fwrite(p,sizeof(STUDENT),1,tfp); /*塊寫*/
}
fclose(sfp); /*關閉源文件*/
fclose(tfp); /*關閉目標文件*/
printf("you have success file!!!\n"); /*顯示成功拷貝*/
}
/*排序*/
STUDENT *sort(STUDENT *h)
{
int i=0; /*保存名次*/
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(t->sum<p->sum&&p!=NULL) /*作總分比較*/
{
q=p; /*待排序點值小,則新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值大,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
p=h; /*已排好序的頭指針賦給p,准備填寫名次*/
while(p!=NULL) /*當p不為空時,進行下列操作*/
{
i++; /*結點序號*/
p->order=i; /*將名次賦值*/
p=p->next; /*指針後移*/
}
printf("sort sucess!!!\n"); /*排序成功*/
return h; /*返回頭指針*/
}
/*計算總分和均值*/
void computer(STUDENT *h)
{
STUDENT *p; /*定義移動指針*/
int i=0; /*保存記錄條數初值為0*/
long s=0; /*總分初值為0*/
float average=0; /*均分初值為0*/
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時處理*/
{
s+=p->sum; /*累加總分*/
i++; /*統計記錄條數*/
p=p->next; /*指針後移*/
}
average=(float)s/i;/* 求均分,均分為浮點數,總分為整數,所以做類型轉換*/
printf("\n--All students sum score is:%ld average is %5.2f\n",s,average);
}
/*索引*/
STUDENT *index(STUDENT *h)
{
STUDENT *p,*q,*t,*h1; /*定義臨時指針*/
h1=h->next; /*將原表的頭指針所指的下一個結點作頭指針*/
h->next=NULL; /*第一個結點為新表的頭結點*/
while(h1!=NULL) /*當原表不為空時,進行排序*/
{
t=h1; /*取原表的頭結點*/
h1=h1->next; /*原表頭結點指針後移*/
p=h; /*設定移動指針p,從頭指針開始*/
q=h; /*設定移動指針q做為p的前驅,初值為頭指針*/
while(strcmp(t->no,p->no)>0&&p!=NULL) /*作學號比較*/
{
q=p; /*待排序點值大,應往後插,所以新表指針後移*/
p=p->next;
}
if(p==q) /*p==q,說明待排序點值小,應排在首位*/
{
t->next=p; /*待排序點的後繼為p*/
h=t; /*新頭結點為待排序點*/
}
else /*待排序點應插入在中間某個位置q和p之間,如p為空則是尾部*/
{
t->next=p; /*t的後繼是p*/
q->next=t; /*q的後繼是t*/
}
}
printf("index sucess!!!\n"); /*索引排序成功*/
return h; /*返回頭指針*/
}
/*分類合計*/
void total(STUDENT *h)
{
STUDENT *p,*q; /*定義臨時指針變數*/
char sno[9],qno[9],*ptr; /*保存班級號的*/
float s1,ave; /*保存總分和均分*/
int i; /*保存班級人數*/
clrscr(); /*清屏*/
printf("\n\n *******************Total*****************\n");
printf("---class---------sum--------------average----\n");
p=h; /*從頭指針開始*/
while(p!=NULL) /*當p不為空時做下面的處理*/
{
memcpy(sno,p->no,8); /*從學號中取出班級號*/
sno[8]='\0'; /*做字元串結束標記*/
q=p->next; /*將指針指向待比較的記錄*/
s1=p->sum; /*當前班級的總分初值為該班級的第一條記錄總分*/
ave=p->average; /*當前班級的均分初值為該班級的第一條記錄均分*/
i=1; /*統計當前班級人數*/
while(q!=NULL) /*內循環開始*/
{
memcpy(qno,q->no,8); /*讀取班級號*/
qno[8]='\0'; /*做字元串結束標記*/
if(strcmp(qno,sno)==0) /*比較班級號*/
{
s1+=q->sum; /*累加總分*/
ave+=q->average; /*累加均分*/
i++; /*累加班級人數*/
q=q->next; /*指針指向下一條記錄*/
}
else
break; /*不是一個班級的結束本次內循環*/
}
printf("%s %10.2f %5.2f\n",sno,s1,ave/i);
if(q==NULL)
break; /*如果當前指針為空,外循環結束,程序結束*/
else
p=q; /*否則,將當前記錄作為新的班級的第一條記錄開始新的比較*/
}
printf("---------------------------------------------\n");
}
G. 學生成績管理系統VS2010可以運行的
#include<iostream>
#include<iomanip>
#include<fstream>
#include<string>
using namespace std;
#define max 100;
class student
{
public:
student *next;
public:
string name;//姓名
long num;//學號
int x,y,z;//數學,語文,英語
int AA;//總分
void play(){cout<<name<<"學生的學號是"<<num<<",數學:"<<x<<",語文:"<<y<<",英語:"<<z<<",總分:"<<AA<<endl;};
student(string sname,long snum,int sx,int sy,int sz)
{
name=sname;
num=snum;
x=sx;
y=sy;
z=sz;
}
};
class cla
{
public:
cla()//構造函數
{
stu=0;
sload();
}
~cla()//析構函數
{
student *p;
p=stu;
while(p)
{
p=p->next;
delete stu;
stu=p;
}
stu=0;
}
void sadd(); //添加
void sremove(); //刪除
void samend(); //修改
void ssearch(); //查詢
void staxis(); //排序
void ssave(); //保存
void sload(); //讀取
//排序函數
void pxh();
void psx();
void pyw();
void pyy();
void pAA();
private:
student *stu; //頭接點
};
void cla::sadd()//添加
{
student *q;
string name1;
long num1;
int x1,y1,z1;
system("cls");
cout<<"\n **增加的學生** \n"<<endl;
cout<<"請輸入學生的(中間用空格間隔) "<<endl;
cout<<"姓名 學號 數學成績 語文成績 英語成績:"<<endl;
cin>>name1>>num1>>x1>>y1>>z1;
q=new student(name1,num1,x1,y1,z1);
q->next=0;
q->AA=x1+y1+z1;
if(stu)
{
student *t;
t=stu;
if(t->num==num1)
{
cout<<"學號已存在,請重新輸入"<<endl;
return;
}
while(t->next)
{
if(t->num==num1)
{
cout<<"學號已存在,請重新輸入"<<endl;
return;
}
t=t->next;
}
t->next=q;
}
else
{
stu=q;
}
cout<<"輸入完畢"<<endl;
}
void cla::sremove()//刪除
{
system("cls");
int num1;
cout<<"\n** 刪除學生信息 **\n";
cout<<"請輸入想要刪除學生的學號:";
cin>>num1;
//查找要刪除的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
//刪除結點
if(p1!=NULL)//若找到結點,則刪除
{
p1->play();
cout<<"確定刪除嗎?[Y/N]"<<endl;
char c;cin>>c;
if(toupper(c)!='Y') return;
if(p1==stu) //若要刪除的結點是第一個結點
{
stu=p1->next;
delete p1;
}
else //若要刪除的結點是後續結點
{
p2->next=p1->next;
delete p1;
}
cout<<"找到學號為"<<num1<<"的學生,並刪除\n";
}
else //未找到結點
cout<<"未找到想要刪除的學生!\n";
}
void cla::samend()//修改
{
system("cls");
long num1;
cout<<"\n** 修改學生信息 **\n";
cout<<"輸入要修改學生的學號";
cin>>num1;
//查找要修改的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"學號是"<<num1<<"的學生的信息"<<endl;
cout<<"姓名 "<<p1->name<<"數學"<<p1->x<<"語文"<<p1->y<<"英語"<<p1->z<<endl;
cout<<"請輸入修改後的信息:姓名 數學成績 語文成績 英語成績"<<endl;
cin>>p1->name>>p1->x>>p1->y>>p1->z;
p1->AA=p1->x+p1->y+p1->z;
cout<<"修改成功"<<endl;
}
else //未找到接點
cout<<"未找到!\n";
}
void cla::ssearch()//查詢
{
system("cls");
cout<<"\n** 查詢學生信息 **\n"<<endl;
cout<<"請輸入查詢方式:"<<endl;
cout<<"1.按學號查詢"<<endl;
cout<<"2.按姓名查詢"<<endl;
cout<<"3.返回"<<endl;
char c; cin>>c;
switch (c)
{
case '1':
{
long num1;
cout<<"要查詢的學號"<<endl;
cin>>num1;
//查找要查詢的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->num==num1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<"學號是"<<num1<<"的學生的信息"<<endl;
cout<<"姓名:"<<p1->name<<" 數學:"<<p1->x<<" 語文:"<<p1->y<<" 英語:"<<p1->z<<endl;
cout<<"查詢完畢...";
}
else //未找到接點
cout<<"未找到!\n";
break;
}
case '2':
{
string name1;
cout<<"要查詢的學生姓名"<<endl;
cin>>name1;
//查找要查詢的結點
student *p1,*p2;
p1=stu;
while(p1)
{
if(p1->name==name1)
break;
else
{
p2=p1;
p1=p1->next;
}
}
if(p1!=NULL)
{
cout<<name1<<"的學生的信息"<<endl;
cout<<"學號:"<<p1->num<<" 數學:"<<p1->x<<" 語文:"<<p1->y<<" 英語:"<<p1->z<<endl;
cout<<"查詢完畢...";
}
else //未找到接點
cout<<"未找到!\n";
break;
}
case '3': return;
}
}
void cla::pxh() //按學號排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{
p1=stu;
if (p1->num>p1->next->num) // 如果頭結點大於第二個的
{
p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{
p2=p1;
p1=p1->next;
if(p1->num>p1->next->num)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{
p1->play();
p1=p1->next;
}while(p1);
}
void cla::psx()//按數學成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->x>p1->next->x) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->x>p1->next->x)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pyw()//按語文成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->y>p1->next->y) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->y>p1->next->y)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pyy()//按英語成績排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->z>p1->next->z) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->z>p1->next->z)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::pAA()//按總分排序
{
student *p1,*p2;
int n;
p1=stu;
n=1;
while(p1->next)
{ n++; p1=p1->next; }
cout<<"共有"<<n<<"條信息..."<<endl;
int i;
p1=stu;
for(i=1;i<n;i++)
{ p1=stu;
if (p1->AA>p1->next->AA) // 如果頭結點大於第二個的
{ p2=p1->next;
p1->next=p1->next->next;
p2->next=p1; //頭結點交換
stu=p2;
}
p1=stu;
while(p1->next->next) //中間的交換
{ p2=p1;
p1=p1->next;
if(p1->AA>p1->next->AA)
{
p2->next=p1->next;
p1->next=p1->next->next;
p2->next->next=p1;
p1=p2->next; //交換
}
}
}
p1=stu;
do
{ p1->play();
p1=p1->next;
}while(p1);
}
void cla::staxis()//排序
{
system("cls");
char c;
cout<<"請選擇以何種方式排序:"<<endl;
cout<<"1……以學號排序"<<endl;
cout<<"2……以數學成績排序"<<endl;
cout<<"3……以語文成績排序"<<endl;
cout<<"4……以英語成績排序"<<endl;
cout<<"5……以總分排序"<<endl;
cout<<"6……返回"<<endl;
cout<<"請選擇(1-6)"<<endl;
cin>>c;
switch (c)
{
case '1':pxh(); break;
case '2':psx(); break;
case '3':pyw(); break;
case '4':pyy(); break;
case '5':pAA(); break;
case '6':return;
}
}
void cla::ssave() //保存到文件
{
system("cls");
char c;
cout<<"\n保存學生信息(將覆蓋原文件),是否繼續?[Y/N]:"; cin>>c;
if(toupper(c)!='Y') return;
ofstream tfile("date.txt",ios_base::binary);
student *p=stu;
while(p)// 寫入文件
{
tfile<<p->name<<"\t"<<p->num<<"\t"<<p->x<<"\t"<<p->y<<"\t"<<p->z;
tfile<<endl;
p=p->next;
}
tfile.close();
cout<<"保存完畢..."<<endl;
}
void cla::sload() //讀取
{
student *p;
p=stu;
while(p)
{
stu=p->next;
delete p;
p=stu;
}
ifstream tfile("date.txt",ios_base::binary);
string name1;
long num1;
int x1,y1,z1;
tfile>>name1>>num1>>x1>>y1>>z1;
while(tfile.good())
{
//創建學生接點
student *s;
s=stu;
s=new student(name1,num1,x1,y1,z1);
s->next=0;
s->AA=x1+y1+z1;
if(stu) //若已經存在結點
{
student *p2;
p2=stu;
while(p2->next) //查找尾結點
{
p2=p2->next;
}
p2->next=s; //連接
}
else //若不存在結點(表空)
{
stu=s; //連接
}
tfile>>name1>>num1>>x1>>y1>>z1;
}
tfile.close();
cout<<"\n學生信息已經裝入...\n";
}
int main()
{
char c;
cla a;
do
{
cout<<"\n 學 生 成 績 管 理 系 統 \n";
cout<<"**************************************\n";
cout<<" 1……增加學生 \n";
cout<<" 2……刪除學生 \n";
cout<<" 3……修改學生 \n";
cout<<" 4……查詢學生信息 \n";
cout<<" 5……排序 \n";
cout<<" 6……保存信息 \n";
cout<<" 7……讀取信息 \n";
cout<<" 8……退出 \n";
cout<<"**************************************\n";
cout<<"請選擇(1-8):";
cin>>c;
switch(c)
{
case '1': a.sadd();break;
case '2': a.sremove();break;
case '3': a.samend();break;
case '4': a.ssearch();break;
case '5': a.staxis();break;
case '6': a.ssave();break;
case '7': a.sload();break;
}
}while(c!='8');
return 1;
}
H. 用C語言編程實現一個簡單的學生成績管理系統
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<memory.h>
typedefstructstudent
{
charnum[16];
charname[20];
floatscore[4];
structstudent*next;
}stu;
stu*head; //鏈頭指針
stu*create() //創建鏈表,從文件讀取信息
{
printf("Readingstudentinformation: ");
stu*p=NULL; //指針,指向個待插入的結點
stu*q=NULL; //指針,用於在其後插入結點
head=NULL; //一開始鏈表為空
FILE*r=fopen("input.dat","r");
p=(stu*)malloc(sizeof(stu));
while(fscanf(r,"%s%s%f%f%f",p->num,p->name,&p->score[0],&p->score[1],&p->score[2])!=EOF)
{
p->score[3]=(p->score[0]+p->score[1]+p->score[2])/3.0;
fprintf(stdout,"%s %s %g %g %g %.2f ",p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3]);
p->next=NULL;
if(head==NULL) //head為空,要插入第一個
{
head=p;
} //結點,讓頭指針指向結點p
else
{ //否則不是頭結點,應將p結點
q->next=p; //插入到q結點的後面
}
q=p; //q指向當前最後一個結點
p=(stu*)malloc(sizeof(stu));
}
fclose(r);
if(head!=NULL)
{
q->next=NULL; //讓q所指的最後一個結點的指針域為空說明這已是鏈尾了
}
returnhead; //返回頭指針
}
voidsort(stu**head,intn)
{
FILE*w=NULL;
if(n==0)
{
w=fopen("sortByMath.dat","w");
}
elseif(n==1)
{
w=fopen("sortByEnglish.dat","w");
}
elseif(n==2)
{
w=fopen("sortByComputer.dat","w");
}
elseif(n==3)
{
w=fopen("sortByAvg.dat","w");
}
stu*q,*t,*p;
stu*new_head=newstu;
new_head->next=*head;
p=new_head;
t=NULL;
while(t!=new_head->next)
{
p=new_head;
q=p->next;
while(q->next!=t)
{
if((p->next->score[n])<(q->next->score[n]))
{
p->next=q->next;
q->next=q->next->next;
p->next->next=q;
}
p=p->next;
q=p->next;
}
t=q;
}
*head=new_head->next;
p=*head;
q=p->next;
printf("學號 姓名 數學 英語 計算機 平均成績 ");
intgrade=1;
while(p!=NULL)
{
fprintf(w,"%s %s %g %g %g %.2f %d ",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],grade);
fprintf(stdout,"%s %s %g %g %g %.2f %d ",
p->num,p->name,p->score[0],p->score[1],p->score[2],p->score[3],grade);
if(q!=NULL&&q->score[3]<p->score[3])grade+=1;
p=p->next;
if(q!=NULL)q=q->next;
}
printf(" ");
fclose(w);
}
voidcount(stu*head)
{
floatcnt[4][8];
inti,j;
for(i=0;i<4;i++)
{
for(j=0;j<8;j++)
{
if(j!=2)cnt[i][j]=0;
elsecnt[i][j]=100;
}
}
stu*r=head;
while(r!=NULL)
{
r=r->next;
}
}
intmain()
{
head=create();
printf("Sortingbyaveragescore: ");
sort(&head,3);
system("pause");
return0;
}
I. 用C語言編寫一個學生成績管理系統。
#include<stdio.h> /*引用庫函數*/
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
typedef struct /*定義結構體數組*/
{
char num[10]; /*學號*/
char name[20]; /*姓名*/
int score; /*成績*/
}Student;
Student stu[80]; /*結構體數組變數*/
int menu_select() /*菜單函數*/
{
char c;
do{
system("cls"); /*運行前清屏*/
printf("\t\t****學生成績管理系統****\n"); /*菜單選擇*/
printf("\t\t | 1. 輸入學生信息|\n");
printf("\t\t | 2. 顯示學生信息 |\n");
printf("\t\t | 3. 排序 |\n");
printf("\t\t | 4. 增添學生信息 |\n");
printf("\t\t | 5. 刪除學生信息 |\n");
printf("\t\t | 6. 查詢 |\n");
printf("\t\t | 7. 統計 |\n");
printf("\t\t | 0. 退出 |\n");
printf("\t\t*****************************************\n");
printf("\t\t\t請選擇操作(0-9):");
c=getchar(); /*讀入選擇*/
}while(c<'0'||c>'9');
return(c-'0'); /*返回選擇*/
}
int Input(Student stud[],int n) /*輸入若干條記錄*/
{int i=0;
char sign,x[10]; /*x[10]為清除多餘的數據所用*/
while(sign!='n'&&sign!='N') /*判斷*/
{ printf("\t\t\t學號:"); /*交互輸入*/
scanf("\t\t\t%s",stud[n+i].num);
printf("\t\t\t學生姓名:");
scanf("\t\t\t%s",stud[n+i].name);
printf("\t\t\t學生成績:");
scanf("\t\t\t%d",&stud[n+i].score);
gets(x); /*清除多餘的輸入*/
printf("\t\t\t需要輸入更多信息?(Y/N)");
scanf("\t\t\t%c",&sign); /*輸入判斷*/
i++;
}
return(n+i);
}
void Display(Student stud[],int n) /*顯示所有記錄*/
{
int i;
printf("\t\t\t-----------------------------------\n"); /*格式頭*/
printf("\t\t\t學號\t\t姓名\t\t成績\n");
printf("\t\t\t-----------------------------------\n");
for(i=1;i<n+1;i++) /*循環輸入*/
{
printf("\t\t\t%-16s%-15s%d\n",stud[i-1].num,stud[i-1].name,stud[i-1].score);
if(i>1&&i%10==0) /*每十個暫停*/
{printf("\t\t\t-----------------------------------\n"); /*格式*/
printf("\t\t\t");
system("pause");
printf("\t\t\t-----------------------------------\n");
}
}
printf("\t\t\t");
system("pause");
}
void Sort_by_num(Student stud[],int n) /*按學號排序*/
{ int i,j,*p,*q,s;
char t[10];
for(i=0;i<n-1;i++) /*冒泡法排序*/
for(j=0;j<n-1-i;j++)
if(strcmp(stud[j].num,stud[j+1].num)>0)
{strcpy(t,stud[j+1].num);
strcpy(stud[j+1].num,stud[j].num);
strcpy(stud[j].num,t);
strcpy(t,stud[j+1].name);
strcpy(stud[j+1].name,stud[j].name);
strcpy(stud[j].name,t);
p=&stud[j+1].score;
q=&stud[j].score;
s=*p;
*p=*q;
*q=s;
}
}
int Insert_a_record(Student stud[],int n) /*插入一條記錄*/
{char x[10]; /*清除多餘輸入所用*/
printf("\t\t\t學號:"); /*互動式輸入*/
scanf("\t\t\t%s",stud[n].num);
printf("\t\t\t學生姓名:");
scanf("\t\t\t%s",stud[n].name);
printf("\t\t\t學生成績:");
scanf("\t\t\t%d",&stud[n].score);
gets(x);
n++;
Sort_by_num(stud,n); /*調用排序函數*/
printf("\t\t\t添加成績信息!\n"); /*返回成功信息*/
return(n);
}
int Delete_a_record(Student stud[],int n) /*按姓名查找,刪除一條記錄*/
{ char s[20];
int i=0,j;
printf("\t\t\t請輸入所要刪除數據的姓名:"); /*互動式問尋*/
scanf("%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t未找到數據!\n"); /*返回失敗信息*/
return(n);
}
for(j=i;j<n-1;j++) /*刪除操作*/
{
strcpy(stud[j].num,stud[j+1].num);
strcpy(stud[j].name,stud[j+1].name);
stud[j].score=stud[j+1].score;
}
printf("\t\t\t刪除結束!\n"); /*返回成功信息*/
return(n-1);
}
void Query_a_record(Student stud[],int n) /*查找並顯示一個記錄*/
{ char s[20];
int i=0;
printf("\t\t\t請輸入您所查找的學生姓名:"); /*互動式輸入*/
scanf("\t\t\t%s",s);
while(strcmp(stud[i].name,s)!=0&&i<n) i++; /*查找判斷*/
if(i==n)
{ printf("\t\t\t未找到!\n"); /*輸入失敗信息*/
return;
}
printf("\t\t\t學號是:%s\n",stud[i].num); /*輸出該學生信息*/
printf("\t\t\t成績是:%d\n",stud[i].score);
}
void Statistic(Student stud[],int n) /*新增功能,輸出統計信息*/
{ int i,j=0,k=0,sum=0;
float aver; /*成績平均值*/
for(i=0;i<n;i++) /*循環輸入判斷*/
{
sum+=stud[i].score;
if(stud[j].score>stud[i].score) j=i;
if(stud[k].score<stud[i].score) k=i;
}
aver=1.0*sum/n;
printf("\t\t\t總共有 %d 條信息.\n",n); /*總共記錄數*/
printf("\t\t\t最高分:\n"); /*最高分*/
printf("\t\t\t學號:%s 姓名:%s 成績:%d\n",stud[j].num,stud[j].name,stud[j].score);
printf("\t\t\t最低分:\n"); /*最低分*/
printf("\t\t\t學號:%s 姓名:%s 成績:%d\n",stud[k].num,stud[k].name,stud[k].score);
printf("\t\t\t平均分 %5.2f\n",aver); /*平均分*/
}
void main() /*主函數*/
{
int n=0;
for(;;)
{
switch(menu_select()) /*選擇判斷*/
{
case 1:
printf("\t\t\t輸入學生信息\n"); /*輸入若干條記錄*/
n=Input(stu,n);
break;
case 2:
printf("\t\t\t顯示所有學生信息\n"); /*顯示所有記錄*/
Display(stu,n);
break;
case 3:
printf("\t\t\t排序\n");
Sort_by_num(stu,n); /*按學號排序*/
printf("\t\t\t排序結束!\n");
printf("\t\t\t");
system("pause");
break;
case 4:
printf("\t\t\t增添學生信息\n");
n=Insert_a_record(stu,n); /*插入一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 5:
printf("\t\t\t刪除一個學生信息\n");
n=Delete_a_record(stu,n); /*按姓名查找,刪除一條記錄*/
printf("\t\t\t");
system("pause");
break;
case 6:
printf("\t\t\t查詢\n");
Query_a_record(stu,n); /*查找並顯示一個記錄*/
printf("\t\t\t");
system("pause");
break;
case 7:
printf("\t\t\t統計\n");
Statistic(stu,n); /*新增功能,輸出統計信息*/
printf("\t\t\t");
system("pause");
break;
case 0:
printf("\t\t\t程序結束\n"); /*結束程序*/
printf("\t\t\t");
system("pause");
exit(0);
}
}
}
J. 我需要用VS2015寫一個學生成績管理系統
C++寫?作死啊?C#寫這種系統快很多