學生成績管理系統設計
㈠ 學生成績管理系統設計
我是趙文滔
#include<stdio.h>
#include<string.h>
#define SIZE 2
struct xs
{
int num;
char name[20];
float yingyu;
float shuxue;
float pingjun;
}xuesheng[SIZE+1],*p=xuesheng;
void main()
{
int a,i,j,k=0,m,n,t;
char b[20],c;
do{
printf("請輸入選項:\n1輸入學生成績\n2按姓名查詢學生成績\n3按學號查找學生成績\n4按姓名排序\n5按學號排序\n6按成績排序\n7列印學生成績\n");
scanf("%d",&a);
if(a==1)
{
printf("請輸入學生姓名、學號、英語成績、數學成績\n");
for(i=1;i<=SIZE;i++)
{
scanf("%s %d %f %f",xuesheng[i].name ,&xuesheng[i].num ,&xuesheng[i].yingyu ,&xuesheng[i].shuxue );
xuesheng[i].pingjun =(xuesheng[i].yingyu+xuesheng[i].shuxue)/2;
}
m=0;
}
else {printf("請先輸入數據\n");m=1;}
}while(m==1);
do
{printf("是否進行其他操作?1/0\n");
scanf("%d",&k);
if(k==1)
{
printf("請再次輸入選擇\n");
scanf("%d",&a);
if(a==2)
{
printf("請輸入要查詢的姓名\n");
scanf("%s",b);
for(i=1;i<=SIZE;i++)
{
if(strcmp(b,xuesheng[i].name)==0)printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
}
if(a==3)
{
printf("請輸入要查詢的學號\n");
scanf("%d",&m);
printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f",xuesheng[m-1000].name ,xuesheng[m-1000].num ,xuesheng[m-1000].yingyu ,xuesheng[m-1000].shuxue,xuesheng[m-1000].pingjun );
}
if(a==4)
{
printf("按姓名排序如下:\n");
for(i=1;i<=SIZE;i++)
{ for(j=i+1;j<=SIZE;j++)
if(strcmp(xuesheng[i].name,xuesheng[j].name)>0){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
}
for(i=1;i<=SIZE;i++)
printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==5)
{
printf("按學號排序如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==6)
{
printf("按平均成績排序如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].pingjun>xuesheng[j].pingjun){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==7)
{
printf("按學號輸出如下:\n");
for(i=1;i<=SIZE;i++)
for(j=i+1;j<=SIZE;j++)
if(xuesheng[i].num>xuesheng[j].num){*p=xuesheng[j];xuesheng[j]=xuesheng[i];xuesheng[i]=*p;}
for(i=1;i<=SIZE;i++)
printf("姓名:%s學號%d英語成績%f數學成績:%f平均成績%f\n",xuesheng[i].name ,xuesheng[i].num ,xuesheng[i].yingyu ,xuesheng[i].shuxue,xuesheng[i].pingjun );
}
if(a==0)printf("謝謝使用\n");
if(a==8||a==9)printf("請重新輸入\n");
}
}while(a!=0);
}
㈡ 學生成績管理系統課程設計
功能 能夠實現輸入記錄、查詢記錄、更新記錄、統計記錄、輸出記錄等功能。
1. 輸入記錄。對每個學生的學號、姓名、班級、數學、英語、計算機成績進行輸入並存儲,在程序的運行過程中,數據的存儲可以採用結構體數組或者鏈表,但是最終應該存儲在文件中。
2. 維護記錄。能夠實現添加、刪除、修改學生記錄,但是一定要將最終數據存儲到文件中。
3. 查詢記錄。根據班級、學號、科目等查詢學生的成績。如果查詢時學生數據並沒有讀入到結構體數組或者鏈表中,則應該先從文件中讀出數據並存儲在結構體數組或者鏈表中,然後在結構體數組或者鏈表中查詢滿足條件的數據。
4. 統計記錄。完成對各門功課最高分和不及格人數的統計。
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define LEN sizeof(Student)
typedef struct student
{
int num;
char name[20];
int score[4];
int sum;
struct student *next;
}Student;
int n;
Student *cin(void);
Student *sort_1(Student *head,int);
void sort_2(Student *head);
void print(Student *head);
Student *sort_all(Student *head);
void find(Student *head);
Student *add_new(Student *head);
Student *cin()
{
int flag;
Student *head,*p1,*p2;
n=0;
head=(Student *)malloc(LEN);
p2=head;
printf("\n請輸入第%d名學生的學號,學號為0表示結束輸入:",n+1);
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
n++;
p1=(Student *)malloc(LEN);
p1->num=flag;
printf("請輸入第%d名學生的姓名:",n);
scanf("%s",p1->name);
printf("請輸入第%d名學生的語文成績:",n);
scanf("%d",&p1->score[0]);
printf("請輸入第%d名學生的數學成績:",n);
scanf("%d",&p1->score[1]);
printf("請輸入第%d名學生的英語成績:",n);
scanf("%d",&p1->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p1->score[3]);
p1->sum=p1->score[0]+p1->score[1]+p1->score[2]+p1->score[3];
p2->next=p1;
p2=p1;
printf("\n請輸入第%d名學生的學號,沒有此學生則輸入0表示結束:",n+1);
scanf("%d",&flag);
}
p2->next=NULL;
printf("\n\n");
return head;
}
Student *sort_all(Student *head)
{
int choose;
for(;;)
{
printf("\n\t\t# # # # # 學生成績統計排序 # # # #\n");
printf("\t\t#\t1.按學生學號排序\t #\n");
printf("\t\t#\t2.按學生總分排序\t #\n");
printf("\t\t#\t3.按學生語文成績排序\t #\n");
printf("\t\t#\t4.按學生數學成績排序\t #\n");
printf("\t\t#\t5.按學生英語成績排序\t #\n");
printf("\t\t#\t6.按學生計算機成績排序\t #\n");
printf("\t\t#\t7.單科高分及均分\t #\n");
printf("\t\t#\t8.顯示當前學生成績\t #\n");
printf("\t\t#\t0.返回上一級菜單\t #\n");
printf("\t\t# # # # # 由himpo友情提供# # # # #\n\n");
printf("請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:
case 2:
case 3:
case 4:
case 5:
case 6:head=sort_1(head,choose);break;
case 7:print(head);sort_2(head);break;
case 8:print(head);break;
case 0:return head;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}
Student *sort_1(Student *head,int choose)
{
Student *p1,*p2=head->next,*pm,*px;
Student mid;
if (!p2) return head;
for(p1=p2;p1->next!=NULL;p1=p1->next)
{
pm=p1;
for(p2=p1->next;p2!=NULL;p2=p2->next)
switch(choose)
{
case 1:if (pm->num>p2->num) pm=p2;break;
case 2:if (pm->sum<p2->sum) pm=p2;break;
case 3:if (pm->score[0]<p2->score[0]) pm=p2;break;
case 4:if (pm->score[1]<p2->score[1]) pm=p2;break;
case 5:if (pm->score[2]<p2->score[2]) pm=p2;break;
case 6:if (pm->score[3]<p2->score[3]) pm=p2;break;
}
if (pm!=p1)
{
mid=*pm;
*pm=*p1;
*p1=mid;
px=pm->next;
pm->next=p1->next;
p1->next=px;
}
}
printf("\n排序後的成績表為:\n");
print(head);
return head;
}
void sort_2(Student *head)
{
Student *p=head->next;
int max_1,max_2,max_3,max_4,min_1,min_2,min_3,min_4;
int max_sum,min_sum;
int sum_1=0,sum_2=0,sum_3=0,sum_4=0;
float aver_1,aver_2,aver_3,aver_4,aver_sum;
if (!p) return;
max_1=min_1=p->score[0];max_2=min_2=p->score[1];
max_3=min_3=p->score[2];max_2=min_2=p->score[3];
max_sum=min_sum=p->sum;
for(;p;p=p->next)
{
if (max_1<p->score[0]) max_1=p->score[0];
else if (min_1>p->score[0]) min_1=p->score[0];
if (max_2<p->score[1]) max_2=p->score[1];
else if (min_2>p->score[1]) min_2=p->score[1];
if (max_3<p->score[2]) max_3=p->score[2];
else if (min_3>p->score[2]) min_3=p->score[2];
if (max_4<p->score[3]) max_4=p->score[3];
else if (min_4>p->score[3]) min_4=p->score[3];
if (max_sum<p->sum) max_sum=p->sum;
else if (min_sum>p->sum) min_sum=p->sum;
sum_1+=p->score[0];sum_2+=p->score[1];sum_3+=p->score[2];sum_4+=p->score[3];
}
aver_1=1.0*sum_1/n;aver_2=1.0*sum_2/n;aver_3=1.0*sum_3/n;aver_4=1.0*sum_4/n;
aver_sum=aver_1+aver_2+aver_3+aver_4;
printf("總共%d名學生,具體數據為:\n",n);
printf("語文最高分為%d,最低分為%d,平均分為%.2f\n",max_1,min_1,aver_1);
printf("數學最高分為%d,最低分為%d,平均分為%.2f\n",max_2,min_2,aver_2);
printf("英語最高分為%d,最低分為%d,平均分為%.2f\n",max_3,min_3,aver_3);
printf("計算機最高分為%d,最低分為%d,平均分為%.2f\n",max_4,min_4,aver_4);
printf("總分最高分為%d,最低分位%d,平均分為%.2f\n",
max_sum,min_sum,aver_sum);
}
void find(Student *head)
{
Student *p;
int choose,fnum;
char tem[20];
if (n==0) {printf("\n當前系統沒有任何學生數據,您就別費勁了!\n ");return;}
for(;;)
{
printf("\n請輸入您要查詢學生的方式:\n\n");
printf("1、按學號查詢;2、按姓名查詢;0、我不查詢了。\n\n");
printf("請選擇:");
scanf("%d",&choose);
while(getchar()!='\n');
if (choose==1)
{
printf("\n請輸入你要查詢的學生的學號,輸入0退出學號查詢:");
scanf("%d",&fnum);
for(;fnum;)
{
for(p=head->next;p!=NULL&&p->num!=fnum;p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的學號,請重新輸入,輸入0表示結束:");
scanf("%d",&fnum);
}
else if (p->num==fnum)
{
printf("\n學號為%d學生的數據為:\n",p->num);
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機\
成績 總分\n");
printf("%d\t%s\t %d %d %d %d \
%d\n",p->num,
p->name,p->score[0],p->score[1],p->score[2],p->score[3],
p->sum);
printf("\n\n請輸入你還要查詢的學生的學號,輸入0表示不按學\
號查詢了:");
scanf("%d",&fnum);
}
}
}
else if (choose==2)
{
printf("\n請輸入你要查詢的學生的姓名,輸入0退出姓名查詢:");
scanf("%s",tem);
for(;strcmp(tem,"0");)
{
for(p=head->next;p!=NULL&&strcmp(p->name,tem);p=p->next);
if (!p)
{
printf("\n\n找不到你要查詢的姓名,請重新輸入,輸入0表\
示結束:");
scanf("%s",tem);
}
else if (!strcmp(p->name,tem))
{
printf("\n姓名為%s學生的數據為:\n",p->name);
printf("學號\t姓名\t語文成績 數學成績 英語成績 \
計算機成績 總分\n");
printf("%d\t%s\t %d %d %d \
%d %d\n",
p->num,p->name,p->score[0],p->score[1],p->score[2],
p->score[3],p->sum);
printf("\n\n請輸入你還要查詢的學生的姓名,輸入0表\
示不按姓名查詢了:");
scanf("%s",tem);
}
}
}
else if (choose==0) {printf("\n你選擇了不查詢!\n");break;}
else {printf("\n你以其他方式選擇了不查詢!\n");break;}
}
}
Student *add_new(Student *head)
{
Student *p;
int flag;
printf("\n\n請輸入你要新加入學生的學號,學號為0表示結束輸入:");
scanf("%d",&flag);
while(getchar()!='\n');
for(;flag;)
{
p=(Student *)malloc(LEN);
p->num=flag;
printf("請輸入新加入學生的姓名:",n);
scanf("%s",p->name);
printf("請輸入新加入學生的語文成績:",n);
scanf("%d",&p->score[0]);
printf("請輸入新加入學生的數學成績:",n);
scanf("%d",&p->score[1]);
printf("請輸入新加入學生的英語成績:",n);
scanf("%d",&p->score[2]);
printf("請輸入第%d名學生的計算機成績:",n);
scanf("%d",&p->score[3]);
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3];
p->next=head->next;
head->next=p;
n++;
printf("\n請輸入還要加入學生的學號,沒有此學生則輸入0表示結束:");
scanf("%d",&flag);
}
head=sort_1(head,1);
printf("加入後的成績表為:\n");
print(head);
return head;
}
void print(Student *head)
{
Student *p=head->next;
if (!p) {printf("\n\n此系統目前沒有任何學生數據!\n\n\n");return;}
printf("此系統目前共計學生%d名:\n",n);
printf("**************************學生成績統計一覽************************\
*****\n");
printf("學號\t姓名\t語文成績 數學成績 英語成績 計算機成績 總分\n");
for(;p;p=p->next)
printf("%d\t%s\t %d %d %d %d %d\n",
p->num,p->name,
p->score[0],p->score[1],p->score[2],p->score[3],
p->sum=p->score[0]+p->score[1]+p->score[2]+p->score[3]);
printf("************************此軟體由himpo友情提供*************************\
*\n\n");
}
int main()
{
Student *head;
int choose,i;
head=(Student *)malloc(LEN);
head->next=NULL;
for(;;)
{
printf("\n\t\t* * * * * 學生成績管理系統 * * * *\n");
printf("\t\t*\t1.學生數據鍵盤錄入\t *\n");
printf("\t\t*\t2.學生數據統計排序\t *\n");
printf("\t\t*\t3.查詢學生數據\t\t *\n");
printf("\t\t*\t4.插入學生數據\t\t *\n");
printf("\t\t*\t5.顯示當前成績表\t *\n");
printf("\t\t*\t0.退出成績管理系統\t *\n");
printf("\t\t* * * * * 由himpo友情提供* * * * *\n\n");
printf("\n請輸入你要執行的操作:");
scanf("%d",&choose);
while(getchar()!='\n');
switch(choose)
{
case 1:printf("\n\t\t\t\t****注意****");
printf("\n\n 此選項將會建立新的學生數據系統 ,原來的數據將\
不再存在,你確信要刪除原來的數據並建立新的數據系統么?\n\n");
printf("1、建立新的數據系統;0、放棄建立新的數據系統。\n\n");
printf("請選擇:");
scanf("%d",&i);
if (i==1) {head=cin();print(head);break;}
else if (i==0)
{
printf("\n你選擇了放棄建立新的數據系統!\n");
break;
}
else {
printf("\n你做出別的選擇,當作放棄建立!\n");
break;
}
case 2:head=sort_all(head);break;
case 3:find(head);break;
case 4:head=add_new(head);
case 5:print(head);break;
case 0:system("pause");return 0;
default: printf("\n\n您的輸入有誤!請重新輸入:\n\n");break;
}
}
}
㈢ 設計學生成績管理系統
#include #include #include #define MAX 1000 /*定義學生成績信息結構*/ struct stu { char id[8]; char name[8]; double Chinese; double Math; double English; double average; double total; }; /*學生結構數組,用於存儲學生成績信息*/ struct stu students[MAX]; /*當前學生人數*/ int current; void input() { int i; printf("請輸入學生人數:"); scanf("%d", & current); for (i = 0; i < current; i++) { printf("\n請輸入學生學號,最多為7位數: "); scanf("%s", students[i].id); printf("請輸入學生姓名:"); scanf("%s", students[i].name); printf("請輸入語文成績:"); scanf("%lf", &students[i].Chinese); printf("請輸入數學成績:"); scanf("%lf", &students[i].Math); printf("請輸入英語成績:"); scanf("%lf", &students[i].English); students[i].total = students[i].Chinese + students[i].Math + students[i].English; students[i].average = students[i].total / 3; } } /*排名次,即對學生結構數組排序*/ void sort(struct stu array[], int n) { int i, j; struct stu temp; for (i = 0; i < n; i++) { for (j = i+1; j < n; j++) { if (array[i].average - array[j].average < 1e-16) { temp = array[i]; array[i] = array[j]; array[j] = temp; } } } } /*統計平均成績,並輸出各分數段的人數*/ void print_score(struct stu array[], int n) { int i; double ave = 0; int sum1 = 0, sum2 = 0, sum3 = 0, sum4 = 0; for (i = 0; i < n; i++) { ave += array[i].average; switch ((int)(array[i].average / 10)) { case 10: case 9: sum1++; break; case 8: sum2++; break; case 7: case 6: sum3++; break; default: sum4++; } } printf("全班的平均分為:%.1f\n", ave/n); printf("平均分在90分以上的人數為:%d\n", sum1); printf("平均分在80~89的人數為:%d\n", sum2); printf("平均分在60~79的人數為:%d\n", sum3); printf("平均分在60分以下的人數為:%d\n", sum4); } /*輸出不及格科目及學生名單*/ void print_unreach(struct stu array[], int n) { int i; printf("科目\t學號\t名字\n"); for (i = 0; i < n; i++) { if (array[i].Chinese < 60) { printf("語文\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].Math < 60) { printf("數學\t%s\t%s\n", array[i].id, array[i].name); } if (array[i].English 60) { printf("英語\t%s\t%s\n", array[i].id, array[i].name); } } } /*列印優等生名單*/ void print_good(struct stu array[], int n) { int i; char mark = 0; if (n > 3) { n = 3; } printf("學號\t姓名\t語文\t數學\t英語\t平均分\t名次\n"); for (i = 0; i n; i++) { if ((array[i].Chinese > 60) && (array[i].Math > 60) && (array[i].English > 60)) { if (array[i].average > 90) mark = 1; else if (array[i].average > 85) { if (array[i].Chinese == 100) mark = 1; if (array[i].Math == 100) mark = 1; if (array[i].English == 100) mark = 1; if (array[i].Chinese > 95 && array[i].English > 95) mark = 1; if (array[i].Chinese > 95 && array[i].Math > 95) mark = 1; if (array[i].Math > 95 && array[i].English > 95) mark = 1; } if (mark == 1) { printf("%s\t%s\t", array[i].id, array[i].name); printf("%.f\t%.f\t%.f\t%.1f\t", array[i].Chinese, array[i].Math, array[i].English, array[i].average); printf("%d\n", i+1); } } } } /*按學生姓名查詢成績*/ void search_name(struct stu array[], int n, char* name) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(name, array[i].name) == 0) { printf("學生姓名:%s\n", name); printf("學生學號:%s\n", array[i].id); printf("語文:%.f\n", array[i].Chinese); printf("數學:%.f\n", array[i].Math); printf("英語:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; } } if (mark == 1) puts("不存在該學生記錄"); } /*按學生學號查詢成績*/ void search_id(struct stu array[], int n, char* id) { int i; char mark = 1; for (i = 0; i < n; i++) { if (strcmp(id, array[i].id) == 0) { printf("學生姓名:%s\n", array[i].name); printf("學生學號:%s\n", array[i].id); printf("語文:%.f\n", array[i].Chinese); printf("數學:%.f\n", array[i].Math); printf("英語:%.f\n", array[i].English); printf("平均分:%.1f\n", array[i].average); mark = 0; break; } } if (mark == 1) puts("不存在該學生記錄"); } void print_menu() { system("cls"); printf("1.輸入學生信息\n"); puts("2.統計全班學生成績"); puts("3.按學號查詢學生成績"); puts("4.按姓名查詢學生成績"); puts("5.輸出不及格情況"); puts("6.輸出優等生名單"); puts("0.退出本程序"); printf("\n\n 請輸入你的選擇:"); } int main(int argc, char **argv) { char ch = 0; char id[8], name[8]; while (ch != '0') { print_menu(); ch = getchar(); switch (ch) { case '1': { system("cls"); input(); sort(students, current); break; } case '2': { system("cls"); print_score(students, current); break; } case '3': { system("cls"); printf("請輸入學號:"); scanf("%s", id); search_id(students, current, id); break; } case '4': { system("cls"); printf("請輸入姓名:"); scanf("%s", name); search_name(students, current, name); break; } case '5': { system("cls"); print_unreach(students, current); break; } case '6': { system("cls"); print_good(students, current); break; } case '0': exit(0); } printf("\n\n按任意鍵返回主菜單……"); getchar(); getchar(); } return 0; }
㈣ 學生成績管理系統的設計與實現
給一個我以前寫過的吧,功能應該差不多#include #include #include #include #include #include #include #include #include using namespace std;/*定義學生結構體*/struct Student{ char ID[20]; char Name[20]; float Mark1; float Mark2; float Mark3; float Average;};/*聲明學生數組及學生數量*/struct Student students[1000];int num=0; /*求平均值*/float Avg(struct Student stu){ return (stu.Mark1+stu.Mark2+stu.Mark3)/3;} /*通過學號返回數組下標*/int Student_SearchByIndex(char id[]){ int i; for (i=0;i
㈤ 學生成績管理系統設計C++
#include<iostream>
#include<stdio.h>
#include<ctype.h>
#include<stdlib.h>
#include<string.h>
#include<iostream>
#include<iomanip>
using namespace std;
typedef struct
{
char num[10];
char cla[10];
char name[20];
char chian[10];
char shuxue[20];
char english[10];
char jsj[20];
}Student;
Student stu[80];
int menu()
{
char c;
for(;c<'0'||c>'9';)
{
system("cls");
cout<<"歡迎使用我們的程序。"<<endl;
cout<<"編程人員:彭正直,段傳奇,賴勝蓮,張弋寒,楊斌,朴惠燕,趙晨春,於鵬龍,姜淼.";
cout<<endl;
cout<<"************** 學生成績管理系統 ************** "<<endl;
cout<<setw(15)<<" "<<"1.輸入學生信息"<<endl;
cout<<setw(15)<<" "<<"2.輸出學生信息"<<endl;
cout<<setw(15)<<" "<<"3.排序"<<endl;
cout<<setw(15)<<" "<<"4.插入一條記錄"<<endl;
cout<<setw(15)<<" "<<"5.按姓名查找,刪除一條記錄"<<endl;
cout<<setw(15)<<" "<<"6.查找並顯示一個記錄"<<endl;
cout<<setw(15)<<" "<<"7.按姓名修改一條記錄"<<endl;
cout<<setw(15)<<" "<<"8.從文件中讀入數據"<<endl;
cout<<setw(15)<<" "<<"0.儲存數據並退出系統"<<endl;
cout<<setfill('*')<<setw(48)<<"*"<<endl;
cout<<setw(15)<<" ";
cout<<"請選擇(0-10):";
c=getchar();
}
return(c-'0');
}
int Input(Student stud[],int n) //輸入數據。
{
int i=0;
char sign,x[10];
for(;sign != 'n' && sign != 'N';)
{
cout<<setw(15)<<" "<<"班級:";
cin>>stud[n+i].cla;
cout<<setw(15)<<" "<<"學號:";
cin>>stud[n+i].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n+i].name;
cout<<setw(15)<<" "<<"語文:";
cin>>stud[n+i].chian;
cout<<setw(15)<<" "<<"數學:";
cin>>stud[n+i].shuxue;
cout<<setw(15)<<" "<<"英語:";
cin>>stud[n+i].english;
cout<<setw(15)<<" "<<"計算機:";
cin>>stud[n+i].jsj;
gets(x);
cout<<setw(10)<<" ";
cout<<"還有要輸入的信息嗎?(y/n)";
cin>>&sign;
i++;
}
return(n+i);
}
void Display(Student stud[], int n) //輸出數據。
{
int i;
cout<<setw(15)<<" "<<setfill('-')<<setw(65)<<"-"<<endl;
cout<<setw(15)<<" "<<"班級 學號 姓名 語文 數學 英語 計算機"<<endl;
cout<<setw(15)<<" ";
cout<<setfill('-')<<setw(65)<<"-"<<endl;
for(i=1;i<n+1;i++)
{
printf("\t\t%-9s%-9s%-9s%-9s%-9s%-9s%-9s\n",stud[i-1].cla,stud[i-1].num,stud[i-1].name,stud[i-1].chian,stud[i-1].shuxue,stud[i-1].english,stud[i-1].jsj);
if(i>1 && i%10==0)
{
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
cout<<setw(15)<<" ";
system("pause");
cout<<setw(15)<<" "<<setfill('-')<<setw(35)<<"-"<<endl;
}
}
cout<<setw(15)<<" ";
system("pause");
}
void Sort(Student stud[],int n) //按名字排序。
{
int i,j;
char t[20];
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].cla);
strcpy(stud[j+1].cla,stud[j].cla);
strcpy(stud[j].cla,t);
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);
strcpy(t,stud[j+1].chian);
strcpy(stud[j+1].name,stud[j].chian);
strcpy(stud[j].chian,t);
strcpy(t,stud[j+1].shuxue);
strcpy(stud[j+1].name,stud[j].shuxue);
strcpy(stud[j].shuxue,t);
strcpy(t,stud[j+1].english);
strcpy(stud[j+1].name,stud[j].english);
strcpy(stud[j].english,t);
strcpy(t,stud[j+1].jsj);
strcpy(stud[j+1].name,stud[j].jsj);
strcpy(stud[j].jsj,t);
}
cout<<setw(15)<<" "<<"排序成功!"<<endl;
}
int Insert(Student stud[],int n) //插入一條學生信息。
{
char x[10];
cout<<setw(15)<<" "<<"班級:";
cin>>stud[n].cla;
cout<<setw(15)<<" "<<"學號:";
cin>>stud[n].num;
cout<<setw(15)<<" "<<"姓名:";
cin>>stud[n].name;
cout<<setw(15)<<" "<<"語文:";
cin>>stud[n].chian;
cout<<setw(15)<<" "<<"數學:";
cin>>stud[n].shuxue;
cout<<setw(15)<<" "<<"英語:";
cin>>stud[n].english;
cout<<setw(15)<<" "<<"計算機:";
cin>>stud[n].jsj;
gets(x);
n++;
cout<<setw(15)<<" "<<"插入記錄成功!"<<endl;
return(n);
}
int Delete(Student stud[],int n) //按名字查找信息,刪除信息。
{
char s[20];
int i=0,j;
cin>>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);
strcpy(stud[j].cla,stud[j+1].cla);
strcpy(stud[j].chian,stud[j+1].chian);
strcpy(stud[j].shuxue,stud[j+1].shuxue);
strcpy(stud[j].english,stud[j+1].english);
strcpy(stud[j].jsj,stud[j+1].jsj);
}
cout<<setw(15)<<" "<<"當前信息已刪除成功!"<<endl; /*返回成功信息*/
return(n-1);
}
void Query(Student stud[],int n) //按名字查找信息
{
char s[20];
int i=0;
cout<<setw(15)<<" "<<"輸入他(她)的姓名:";
cin>>s;
while(strcmp(stud[i].name,s)!=0&&i<n)
i++; /*查找判斷*/
if(i==n)
{
printf("\t\t\t沒有發現!\n"); /*輸入失敗信息*/
return;
}
cout<<setw(15)<<" "<<"學號:"<<stud[i].num<<endl;
cout<<setw(15)<<" "<<"語文:"<<stud[i].chian<<endl;
cout<<setw(15)<<" "<<"數學:"<<stud[i].shuxue<<endl;
cout<<setw(15)<<" "<<"英語:"<<stud[i].english<<endl;
cout<<setw(15)<<" "<<"計算機:"<<stud[i].jsj<<endl;
}
int Xiugai(Student stud[],int n) //修改信息。
{
n=Delete(stud,n);
cout<<setw(15)<<" "<<"輸入你要修改的學生信息"<<endl;
n=Insert(stud,n);
cout<<setw(15)<<" "<<"修改完成"<<endl;
return(n);
}
int AddfromText(Student stud[], int n) //從文件中讀入數據。
{
int i=0,num;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"輸入文件名:";
cin>>filename;
if((fp=fopen(filename,"rb"))==NULL)
{
cout<<setw(15)<<" "<<"無法打開文件"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
fscanf(fp,"%d",&num);
for(;i<num;)
{
fscanf(fp,"%s%s%s%s%s%s%s",stud[n+i].cla,stud[n+i].num,stud[n+i].name,stud[n+i].chian,stud[n+i].shuxue,stud[n+i].english,stud[n+i].jsj);
i++;
}
n+=num;
fclose(fp);
cout<<setw(15)<<" "<<"成功!"<<endl;
cout<<setw(15)<<" ";
system("pause");
return(n);
}
void WritetoText(Student stud[],int n) //將所有記錄寫入文件。
{
int i=0;
FILE *fp;
char filename[20];
cout<<setw(15)<<" "<<"將記錄寫人文件"<<endl;
cout<<setw(15)<<" "<<"輸入文件名:";
cin>>filename;
if((fp=fopen(filename,"w"))==NULL)
{
cout<<setw(15)<<" "<<"無法打開文件"<<endl;
system("pause");
return;
}
fprintf(fp,"%d\n",n);
for(;i<n;)
{
fprintf(fp,"%-6s%-5s%-5s%-5s%-5s%-5s%-5s\n",stud[i].cla,stud[i].num,stud[i].name,stud[i].chian,stud[i].shuxue,stud[i].english,stud[i].jsj);
i++;
}
fclose(fp);
cout<<setw(15)<<" "<<"成功!"<<endl;
int b;
cout<<setw(15)<<" "<<"請確定是否退出系統:"<<endl;
cout<<setw(15)<<" "<<"0.退出系統"<<endl;
cout<<setw(15)<<" "<<"1.返回"<<endl;
cin>>b;
if(b==0)
{
cout<<setw(15)<<" "<<"謝謝使用!"<<endl;
cout<<setw(15)<<" ";
system("pause");
exit(0);
}
}
void main() //主函數調用。
{
int n=0;
for(;;)
{
switch(menu())
{
case 1:
cout<<setw(15)<<" "<<"輸入信息"<<endl;
n=Input(stu,n);
break;
case 2:
cout<<setw(15)<<" "<<"輸出所有記錄"<<endl;
Display(stu,n);
break;
case 3:
cout<<setw(15)<<" "<<"排序"<<endl;
Sort(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 4:
cout<<setw(15)<<" "<<"插入一條記錄"<<endl;
n=Insert(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 5:
cout<<setw(15)<<" "<<"刪除一條記錄"<<endl;
cout<<setw(15)<<" "<<"輸入他(她)的姓名:";
n=Delete(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 6:
cout<<setw(15)<<" "<<"查找"<<endl;
Query(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
case 7:
cout<<setw(15)<<" "<<"修改"<<endl;
cout<<setw(15)<<" "<<"輸入你要修改的學生的姓名:";
n=Xiugai(stu,n);
system("pause");
break;
case 8:
cout<<setw(15)<<" "<<"從文件中讀入數據"<<endl;
n=AddfromText(stu,n);
break;
case 0:
cout<<setw(15)<<" "<<"將所有記錄寫入文件"<<endl;
WritetoText(stu,n);
cout<<setw(15)<<" ";
system("pause");
break;
}
}
}
㈥ 用C語言設計一個學生成績管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定義學生成績信息結構*/
struct stu
{
char id[8];
char name[8];
(6)學生成績管理系統設計擴展閱讀:
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標准新增)
㈦ 學生成績管理系統設計
你把有的課程名字改一下,或者添加一些東西,在結構體定義那裡
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
struct stu
{
int num;
int wuli;
int huaxue;
int math;
};
FILE *fp;
//添加學生信息,可以排除與已存的沖突;
void add()
{
int a,b,c,d,n=0;
struct stu student;
fp=fopen("score.txt","r+");
printf("請輸入要添加學生的學號、物理成績、化學成績及數學成績\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
while(!feof(fp))
{
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(student.num==a)
{
printf("該學生信息已存在,不需要添加\n");
fclose(fp);
n=1;
break;
}
}
if(n==0)
{
printf("信息庫中沒有該學生信息,可以添加\n");
fseek(fp,0,2);//文件末尾添加;
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
fclose(fp);
}
}
//修改學生信息;
void modify()
{
int n=0,number,a,b,c,d,offset;
struct stu student;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請輸入要修改學生的學號\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("該學生信息為:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("請輸入要修改的信息\n");
scanf("%d%d%d%d",&student.num,&student.wuli,&student.huaxue,&student.math);
fseek(fp,offset,0);
fprintf(fp,"%d\t%d\t%d\t%d\n",student.num,student.wuli,student.huaxue,student.math);
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
//刪除學生信息;
void del()
{
int n=0,number,a,b,c,d,m,offset;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請輸入刪除學生的學號\n");
scanf("%d",&number);
while(!feof(fp))
{
offset=ftell(fp);
fscanf(fp,"%d%d%d%d",&a,&b,&c,&d);
if(number==a)
{
printf("該學生信息為:\n");
printf("%d\t%d\t%d\t%d\n",a,b,c,d);
printf("是否要刪除該學生信息,是:1 ;否:0\n");
scanf("%d",&m);
if(m)
{
fseek(fp,offset,0);
fprintf(fp,"%s\t%s\t%s\t%s"," "," "," "," ");
printf("\n");
printf("該學生信息已刪除\n");
}
else printf("您已放棄刪除該學生信息\n");
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
//查找學生信息;
void search()
{
int n=0,number,a,b,c,d,m;
char s[10];
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("請選擇查找方式:1--按學號查找;0--按學科查找\n");
scanf("%d",&m);
if(m)
{
printf("請輸入要查找學生的學號\n");
scanf("%d",&number);
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
if(number==a)
{
printf("已找到,該學生信息為:\n");
printf("%s %s %s %s\n","學號","物理成績","化學成績","數學成績");
printf("%d\t %d\t %d\t %d\n",a,b,c,d);
n=1;
break;
}
}
if(n==0)
{
printf("該學生信息不存在\n");
}
fclose(fp);
}
else
{
printf("請輸入要查找的學科\n");
scanf("%s",s);
if(strcmp(s,"wuli")==0)
{
printf("學號\t物理成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,b);
fclose(fp);
}
if(strcmp(s,"huaxue")==0)
{
printf("學號\t化學成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,c);
fclose(fp);
}
if(strcmp(s,"math")==0)
{
printf("學號\t數學成績\n");
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
printf("%d\t%d\n",a,d);
fclose(fp);
}
if(strcmp(s,"wuli")&&strcmp(s,"huaxue")&&strcmp(s,"math") )
{
printf("錯誤,要查找的學科不存在\n");
fclose(fp);
}
}
}
//統計學生信息;
void tongji()
{
int n=0,a,b,c,d,m,k,x[100],i,j,l=1;
float sum=0,h[100],k1;
fp=fopen("score.txt","r+");
if(fp==NULL)
{
printf("信息庫為空\n");
exit(0);
}
printf("0--統計單科平均成績\n");
printf("1--統計單個學生的平均成績和總成績,對學生排名\n");
printf("請選擇統計類型\n");
scanf("%d",&m);
if(!m)
{
printf("1--統計物理的平均成績\n");
printf("2--統計化學的平均成績\n");
printf("3--統計數學的平均成績\n");
printf("請選擇要統計的學科\n");
scanf("%d",&m);
if(m==1)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+b;
n++;
}
printf("物理的平均成績為 %2.2f\n",sum/n);
fclose(fp);
}
if(m==2)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+c;
n++;
}
printf("化學的平均成績為 %.2f\n",sum/n);
fclose(fp);
}
if(m==3)
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
sum=sum+d;
n++;
}
printf("數學的平均成績為 %.2f\n",sum/n);
fclose(fp);
}
}
else
{
while(fscanf(fp,"%d%d%d%d",&a,&b,&c,&d)!=-1)
{
h[n]=(float)(b+c+d);
x[n]=a;
n++;
}
for(i=0;l==1&&i<n-1;i++)
{
l=0;
for(j=0;j<n-1-i;j++)
{
if(h[j]>h[j+1])
{
k1=h[j];
h[j]=h[j+1];
h[j+1]=k1;
k=x[j];
x[j]=x[j+1];
x[j+1]=k;
l=1;
}
}
}
printf("排序後\n");
printf("學號\t總成績\t平均成績\n");
for(i=0;i<n;i++)
printf("%d\t%3.0f\t%.2f\n",x[i],h[i],h[i]/3.0);
}
fclose(fp);
}
void main()
{
int m;
/*fp=fopen("score.txt","w");
fprintf(fp,"%s\t%s\t%s\t%s\n","學號","物理成績","化學成績","數學成績");
fclose(fp);*/
while(1)
{
printf("\n\t\t*********歡迎使用學生信息管理系統*********\n\n");
printf("\n\t\t添加,請按1");
printf("\n\t\t修改,請按2");
printf("\n\t\t刪除,請按3");
printf("\n\t\t查詢,請按4");
printf("\n\t\t統計,請按5");
printf("\n\t\t退出,請按0\n");
printf("\n\t\t********************************************\n\n");
printf("Please select(0--5):");
scanf("%d",&m);
if(m>=0&&m<=5)
{
switch(m)
{
case 1: add();
break;
case 2: modify();
break;
case 3: del();
break;
case 4: search();
break;
case 5: tongji();
break;
case 0: exit(0);
}
printf("\n\n操作完畢,請再次選擇!");
}
else
printf("\n\n選擇錯誤,請再次選擇!");
}
}
㈧ 學生成績管理系統有什麼設計原則
#包括
包括
結構學生{
詮釋身份證;
字元名稱[10];
詮釋年齡
>字元性[10];
字元張谷[20];
整數分殊;
字元專業戶[50];
} ST [50];
我= 0;
無效淑如(){
燒焦了;
做{
printf的(「\ n請輸入學號:」);
scanf函數( 「%d」,&ST [i]的ID);
fflush(stdin)中;
printf的(「\ n請輸入你的名字:」);
獲取(ST [I]名);
printf的(「\ n」);
printf的(「請輸入年齡:」);
scanf的(「為%d」,&ST [i]的年齡); printf(「請\ n請輸入性別:」);
得到(ST [I]。性);
fflush(stdin)中
fflush(stdin)中;
printf的(「\ n請輸入院系:」);
得到(ST [I]。張谷);
printf的(「\ n請輸入成績:」);
scanf的(「%D」,ST [I]。分殊);
fflush(stdin)中;
printf的(「\ n請輸入一個專業:);
獲得(ST [I]。專業戶);
printf的(「\ n是否繼續輸入學生信息?(Y / N)」);
fflush(stdin)中;
= getchar函數();
+ +;
}(A =='Y'&& <= 50);
}
BR />無效仙師()
年齡{
詮釋;
printf的(「\ t學號\ t姓名\ t \ t性別\ t學院\ T專業\ T分數的\ n「);
為(J = 0; <; + +)
printf的(」\ t%D \ T%S \ T%D \ T%S \ t%的小號\ t%d \ t其中%s \ n「,
ST [J]。身份證,ST [J]。名稱,ST [J]。年齡,ST [J]。性別,ST張谷[J]。 ,ST [J]。分殊,ST [J]。專業戶);
}
無效叉著()
{
INT M
字元名稱[20],B;
{
printf的(「\ n請輸入要發現學生的姓名:」);
fflush(stdin)中;
獲取(名稱);
為(M = 0,M <I,M + +)
{
(STRCMP(名,ST [M]。名)== 0)
{
printf的(「\ n \你在位置%d的學生發現!!\ n」;,M +1); BR />打破;
}
}
(M> = 20)
printf的(「\ n \ t沒有找到這個學生!\ n」); />其他
{
printf的(「學生編號性別年齡教師專業成績」);
printf的(「\ t%D \ T%S \ T%D \ T%\噸%S \ T%d \ t其中%s \ n「,
ST [M]。身份證,ST [M]。名稱,ST [M]。年齡,ST [M]。性別,ST [M]。張谷,ST [M]。分殊,ST [M]。專業戶);
}
printf的(「\ n能否找到另一種是學生嗎?(Y / N)」);
> fflush(stdin)中
B = getchar函數();
}而(B =='Y');
}
a>
無效閃出()
{
字元名稱[20],C;
整數A,B;
{
輸出(「\ n請輸入你要刪除的學生姓名:\ n」);
fflush(stdin)中
獲取(名稱);
(A = 0; <我一個+ +)
{
(STRCMP(名稱,ST [A]。名)== 0)
打破;
}
/ a>(B = A,B <I,B + +)
ST [B] = ST [+1];
(A>;我)
printf的(「 \ T沒有找到這名學生!!\ n「);
其他
{
-
仙師();
} BR />
printf的(「\ n是否繼續刪除另一名學生的信息?(Y / N)」);
fflush(stdin)中;
C = getchar函數(); BR />},而(C =='Y');
}
無效charu()
淑如( );
}
廉政的main()
{
詮釋改變;
做{
系統(「CLS」);
printf的(「========================的====學生信息管理系統==== =============================== \ n「);
printf的(」\ t \ t:輸入學生信息\ n「);
printf的(」\ t \ t:學生信息\ n「);
printf的(」
\ t \ t:查找學生信息\ n「);的printf (「\ t \ t:刪除學生信息\ n」);
printf的(「\ t \ t五:插入學生信息\ n」);
printf的(「\ t \ t VI:退出程序\ n「);
fflush(stdin)中;
printf的(」\ t \ t請輸入選項:);
scanf的(「%d」,&的變化);切換(改變)
{
案件1:
淑如();突破;
案例2:
仙師()突破;
案例3:
的叉著();突破;
情況4:
閃出();突破;
情況下,5:
charu();休息;
案例6:
突破;
}
}(change! = 6);
系統(「暫停」);
返回0;
}
,正如約瑟夫鏈表是相對簡單的,你拿去做可以做到這一點。
㈨ 設計一個簡單的學生成績管理系統,
我沒寫,只能和你說說怎麼寫。
可以由類模板和數組寫。
我說說類模板的吧。
定義一個Student類存放學生信息(姓名,初始排名,各科成績,個人總分);
初始排名由輸入順序排,在計算名字的時候就可以通過冒泡排序。
在裡面定義計算總分的函數。
下面定義一個Caozuo類,用學生鏈表的做。你可以去找下這個例子。
數組的就很簡單了,你只要想想。先定義數組(姓名,成績),總分就是個人每科成績的和,下面5個函數都可以通過數組遍歷實現。如
cout<<"請輸入你要查詢的學生的名字:"<<endl;
cin>>n;
for(int i=0;i<=Maxsize;i++)
{
if(Student[i].name==n)
Student[i].Print();
}
㈩ 簡單的學生成績管理系統的設計
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
int shoudsave=0; /* */
struct student
{
char num[10];/* 學號 */
char name[20];
char sex[10];
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);
}
int main()
{
Link l;/* 連表 */
FILE *fp; /* 文件指針 */
int sel;
char ch;
char jian;
int count=0;
Node *p,*r;
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;
}
}
system("pause");
return 0;
}