當前位置:首頁 » 考試成績 » 學生成績管理系統的詳細設計

學生成績管理系統的詳細設計

發布時間: 2020-12-23 07:27:15

學生成績管理系統(C語言)的設計方法論述

程序設計的基本目標是用演算法對問題的原始數據進行處理,從而獲得所期望的效果。但這僅僅是程序設計的基本要求。要全面提高程序的質量,提高編程效率,使程序具有良好的可讀性、可靠性、可維護性以及良好的結構,編制出好的程序來,應當是每位程序設計工作者追求的目標。而要做到這一點,就必須掌握正確的程序設計方法和技術。而C語言是一種結構化語言。它層次清晰,便於按模塊化方式組織程序,易於調試和維護。所以採用結構化程序設計方法,對管理系統進行自頂向下,逐步細化,模塊化設計.

對題目的需求分析得出:管理系統對學生的成績信息進行管理,學生信息包括:學號、姓名、學期、每門課程的成績、平均成績、名次。實現:學生信息的錄入;修改;刪除和查詢,按學期、學號、姓名等查詢。
而對輸入的學生成績正確的計算了平均分、最高分、最低分、統計了不及格情況及各分數段的人數。並按要求的格式正確列印.
【功能函數設計】
這個程序比較煩瑣,要求計算平均分,還要算最高分、最低分、統計不及格人數和按不同科目的分數順序輸出,如果每一個都寫一個函數,程序會非常的大,同時效率也不是很高。在此用的應該是一種比較好的方法,此處用到了以下幾個函數:
輸入函數:
void input (mark *s)/*數據輸入函數*/
輸出函數:
void print (mark *p)/*輸出學生的記錄的函數*/
void den(mark *p,mark *q,int *m)/*該函數的功能是將第一個的記錄賦給第二個*/
此函數是為後面的sign函數的調用,把一個人的信息存在一個鏈表中,
void converse (mark *s,fsp *q)/*將學生的記錄轉放到中間變數q中*/
此函數實現的功能是把數學,英語,計算機的個作為一個鏈表存儲在一起,為後面的過程更簡便。
void sign(mark *s,mark *a,mark *b,mark *c,mark *d,fsp *q)
此函數的功能是對學生的各科成績及平均分進行排序。
void count(mark *s) /*統計各科平均分 各科的最高(低)分及各分數段的人數*/
void found(mark *s)/*輸入學生的學號查詢學生的成績情況*/

(1) 程序清單
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 7 /*學生的人數*/
typedef struct
{
char num[5];
char name[10]; /*記錄姓名和學號*/
float math,english,comput,average; /*各個科目及平均分*/
}mark; /*定義學生記錄結構體類型*/
typedef struct
{
float fen[4];
int n;
}fsp;/*定義學生記錄轉化的中間變數*/
void input (mark *s)/*數據輸入函數*/
{
int i;
mark *p;
printf("請輸入每個學生的記錄\n");
for(i=0,p=s;i<N;i++,p++)
{
scanf("%s%s%f%f%f",p->num,p->name,&p->math,&p->english,&p->comput);
p->average=(p->math+p->english+p->comput)/3;
}
}
void print (mark *p)/*輸出學生的記錄的函數*/
{
int i;
mark *s;
for(i=0,s=p;i<N;i++,s++)
printf("%s %s %.1f %.1f %.1f %.1f\n", s->num,s->name,s->math,s->english,s->comput,s->average);
}
void den(mark *p,mark *q,int *m)/*該函數的功能是將第一個的記錄賦給第二個*/
{
int i; /*m中存放學生的位序號(按成績排序)*/
for(i=0;i<N;i++)
{ strcpy((q+i)->num,(p+*(m+i))->num);
strcpy((q+i)->name,(p+*(m+i))->name);
(q+i)->math=(p+*(m+i))->math;
(q+i)->english=(p+*(m+i))->english;
(q+i)->comput=(p+*(m+i))->comput;
(q+i)->average=(p+*(m+i))->average;
}
}
void converse (mark *s,fsp *q)/*將學生的記錄轉放到中間變數q中*/
{
fsp *p;
int i;
for(i=0,p=q;i<N;i++,p++)
{ p->n=i;
*(p->fen)=(s+i)->math;
*(p->fen+1)=(s+i)->english;
*(p->fen+2)=(s+i)->comput;
*(p->fen+3)=(s+i)->average;
}
}
void sign(mark *s,mark *a,mark *b,mark *c,mark *d,fsp *q)
{ /*對學生的各科成績及平均分進行排序*/
int t[N],i,j,k,x,n;/*t中存放學生的位序號(按成績排序)*/
float temp;/*排序過程中的中間變數 */
for(i=0;i<4;i++)/*i的不同指向不同的科目及平均成績 */
{ for(j=0;j<N;j++)
{ temp=*((q+j)->fen+i); x=j;/*初始化中間變數*/
for(k=j+1;k<N;k++)
if( *((q+k)->fen+i)<temp )
{ x=k; temp=*((q+k)->fen+i);}
if(x!=j)
{ temp=*((q+j)->fen+i);
*((q+j)->fen+i)=*((q+x)->fen+i);
*((q+x)->fen+i)=temp;
n=(q+j)->n; (q+j)->n=(q+x)->n; (q+x)->n=n;
}/*交換兩變數 */
t[j]=(q+j)->n;
}
switch(i)
{ case 0: den(s,a,t);break;
case 1: den(s,b,t);break;
case 2: den(s,c,t);break;
case 3: den(s,d,t);break;
}
}
}
void count(mark *s)/*統計各科平均分 各科的最高(低)分及各分數段的人數*/
{
float ave[3]={0};/*存放各科平均分 */
float m[3][2] ;
int num[3][5]={0};/*存放各分數段的人數*/
int i;
m[0][1]=m[0][0]=s->math;
m[1][0]=m[1][1]=s->english;
m[2][0]=m[2][1]=s->comput;
for(i=0;i<N;i++)
{ ave[0]+=(s+i)->math;
ave[1]+=(s+i)->english;
ave[2]+=(s+i)->comput;
if( (s+i)->math > m[0][0] )
m[0][0]=(s+i)->math;
else if( (s+i)->math < m[0][1] )
m[0][1]=(s+i)->math;
if( (s+i)->english > m[1][0] )
m[1][0]=(s+i)->english;
else if( (s+i)->english < m[1][1] )
m[1][1]=(s+i)->english;

if( (s+i)->comput > m[2][0] )
m[2][0]=(s+i)->comput;
else if( (s+i)->comput < m[2][1] )
m[2][1]=(s+i)->comput;
/*統計各科的最高(低)分*/
if((s+i)->math<60.0)
num[0][0]++;
else if((s+i)->math<70.0)
num[0][1]++;
else if((s+i)->math<80.0)
num[0][2]++;
else if((s+i)->math<90.0)
num[0][3]++;
else num[0][4]++;
/*統計數學各分數段的人數*/
if((s+i)->english<60.0)
num[1][0]++;
else if((s+i)->english<70.0)
num[1][1]++;
else if((s+i)->english<80.0)
num[1][2]++;
else if((s+i)->english<90.0)
num[1][3]++;
else num[1][4]++;
/*統計英語各分數段的人數*/
if((s+i)->comput<60.0)
num[2][0]++;
else if((s+i)->comput<70.0)
num[2][1]++;
else if((s+i)->comput<80.0)
num[2][2]++;
else if((s+i)->comput<90.0)
num[2][3]++;
else num[2][4]++;
/*統計計算機各分數段的人數 */
}
for(i=0;i<3;i++)
ave[i]=ave[i]/N;
printf("三門科的平均分分別為:\n%.1f %.1f %.1f\n",ave[0],ave[1],ave[2]);
printf("三門科的最高分與最底分分別為:\n");
printf("%.1f %.1f\n%.1f %.1f\n%.1f %.1f\n",
m[0][0],m[0][1],m[1][0],m[1][1],m[2][0],m[2][1]);
printf("三門科不及格 60-69 70-79 80-89 90分以上的人數分別為:\n");
printf("數學: %3d%5d%6d%6d%4d\n",num[0][0],num[0][1],num[0][2],num[0][3],num[0][4]);
printf("英語: %3d%5d%6d%6d%4d\n",num[1][0],num[1][1],num[1][2],num[1][3],num[1][4]);
printf("計算機:%3d%5d%6d%6d%4d\n",num[2][0],num[2][1],num[2][2],num[2][3],num[2][4]);
}
void found(mark *s)/*輸入學生的學號查詢學生的成績情況*/
{
char a[10];/*接受輸入的學號*/
int flag,i;/*循環變數*/
char * b="exit";
do
{ flag=0;
printf("請輸入所要查詢的學生的學號或姓名\n");
getchar();
gets(a);
for(i=0;i<N;i++)
if(strcmp(a,(s+i)->num)==0 || strcmp(a,(s+i)->name)==0 )
{printf("該生的學號,姓名,各門課程及平均成績為:\n%s %s %.1f %.1f %.1f %.1f\n"
,(s+i)->num,(s+i)->name,(s+i)->math,(s+i)->english,(s+i)->comput,(s+i)->average);/*成績列印*/
flag=1;}
if(flag==0) printf("查無此人\n");
}while(strcmp(a,b));
printf("查詢結束");
}
main()
{
mark *s,*a,*b,*c,*d;
fsp *p;
s=(mark*)malloc(N*sizeof(mark));
a=(mark*)malloc(N*sizeof(mark));
b=(mark*)malloc(N*sizeof(mark));
c=(mark*)malloc(N*sizeof(mark));
d=(mark*)malloc(N*sizeof(mark));
p=(fsp*)malloc(N*sizeof(fsp));/*各變數空間開辟 */
input(s);
printf("初始化學生的記錄為:\n");
print(s);
converse(s,p);
sign(s,a,b,c,d,p);
printf("按數學成績排序學生的記錄為:\n");
print(a);
printf("按英語成績排序學生的記錄為:\n");
print(b);
printf("按計算機成績排序學生的記錄為:\n");
print(c);
printf("按平均成績排序學生的記錄為:\n");
print(d);
count(s);
found(s);
getch();
}

Ⅱ 學生成績管理系統設計

我是趙文滔
#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);
}

Ⅲ 簡單的學生成績管理系統的設計

#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;
}

Ⅳ 學生成績管理系統課程設計

你好,我曾用c++學生成績管理系統的程序,希望能對你有所幫助。
#include <string.h>
#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/*------------------------------------定義類部分------------------------------------------------*/
class Node
{
char name[10];
int score;
class Node *next;
public:
Node* CreateNode(int n);
void PrinfListNode(Node *h);
void InsertList(Node *h,int i,char name[],int e,int *n);
void DeleteList(Node *h,int i,int *n);
Node* operator +=(Node *p);
Node *Unique(Node *p,int *n);
};
void DisplayNote(void);

/*--------------------建立單鏈表的成員函數,單鏈表節點的個數不確定--------------------------------*/
Node *Node::CreateNode(int n)
{
Node *head;
Node *pre,*p;
int i;
head=(Node*)malloc(sizeof(Node)); //用malloc動態申請內存,個數作為函數的輸入參數
head->next=NULL;
pre=head;
for (i=1;i<=n;i++)
{
printf("請輸入學生姓名:",i);
p=(Node*)malloc(sizeof(Node));
scanf("%s",p->name);
printf("請輸入此學生的分數:",i);
scanf("%d",&p->score);
pre->next=p;
pre=p;
}
p->next=NULL;
return head;
}
/*---------------------------------輸出鏈表函數實現部分------------------------------------------*/
void Node::PrinfListNode(Node *h)
{
Node *p;
p=h->next;
while(p)
{
printf("name:%s\tscore:%d",p->name,p->score);
p=p->next;
printf("\n");
}
}
/*----------------------------實現單鏈表的插入操作的成員函數--------------------------------------*/
void Node::InsertList(Node *h,int i,char name[],int e,int *n)
{
Node *p,*q;
int j;
if (i<1||i>(*n)+1)
{
printf("出錯啦!請重試!.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=(Node *)malloc(sizeof(Node));
strcpy(q->name,name);
q->score=e;
q->next=p->next;
p->next=q;
(*n)++;
}
}
/*-----------------------------實現單鏈表的刪除操作的成員函數-------------------------------------*/
void Node::DeleteList(Node *h,int i,int *n)
{
Node *p,*q;
int j;
char name[10];
int score;
if (i<1||i>(*n))
{
printf("出錯啦!請重試!.\n");
}
else
{
j=0;p=h;
while(j<i-1)
{
p=p->next;
j++;
}
q=p->next;
p->next=q->next;
strcpy(name,q->name);
score=q->score;
free(q);
(*n)--;
}
}
/*--------------------------重載運算符「+=」實現兩個鏈表對象合並功能------------------------------*/
Node *Node::operator +=(Node *p)
{
Node *q=this;
while(q->next!=NULL) //把第一個鏈表最後的next指向第二個的頭
{
q=q->next;
}
q->next=p->next;
return this;
}
/*----------------編寫Unique()成員函數,實現剔除鏈表中重復元素,使所有節點值唯-----------------*/
Node *Node::Unique(Node *p,int *n)
{ Node *q=this,*k,*m;
int i;
if((*n)<=1) //用循環,拿一個和每一個去比較,一樣的刪除使用已經寫好的刪除函數
cout<<"ERROR!"<<endl;
else
{
for(i=1;i<(*n);q=q->next)
{
k=q;
p=q->next;
while(p!=NULL)
{
if(strcmp(q->name,p->name)==0)
{
m=p;
p=p->next;
k->next=m->next;
free(m);
(*n)--;
}
else{
k=p;
p=p->next;
}

}
}
}
return this;
}
/*--------------------------------編寫主函數測試上述功能---------------------------------------*/
int main()
{
Node *h,*k;
int i=1,n,score;
char name[10];
int *m=0;
while(i)
{
DisplayNote();
scanf("%d",&i);
switch(i)
{
case 1:
printf("請輸入表中成員的個數:\n");
scanf("%d",&n);
h=h->CreateNode(n);
printf("表中成員為:\n");
h->PrinfListNode(h);
break;
case 2:
printf("請寫出成員的位置:");
scanf("%d",&i);
printf("請輸入學生姓名:");
scanf("%s",&name);
printf("請輸入學生分數:");
scanf("%d",&score);
h->InsertList(h,i,name,score,&n);
printf("表中成員為:\n");
h->PrinfListNode(h);
break;
case 3:
printf("請寫出成員的位置:");
scanf("%d",&i);
h->DeleteList(h,i,&n);
cout<<"表中成員為:\n";
h->PrinfListNode(h);
break;
case 4:
printf("表中成員為:\n");
h->PrinfListNode(h);
break;
case 5:
printf("請輸入另一個表中成員的個數:\n");
scanf("%d",&n);
k=k->CreateNode(n);
h=h->operator +=(k);
printf("兩個鏈表相加之後的鏈表是:\n");
h->PrinfListNode(h);
break;
case 6:
h=h->Unique(h,&n);
printf("剔除重復元素後的新鏈表是:\n");
h->PrinfListNode(h);
break;
case 0:
return 0;
break;
default:
printf("出錯啦!請重試!");
}
}
return 0;
}
void DisplayNote(void)
{
printf("1--建立新的鏈表\n");
printf("2--添加元素\n");
printf("3--刪除元素\n");
printf("4--輸出當前鏈表中的內容\n");
printf("5--兩個鏈表對象合並\n");
printf("6--剔除鏈表中重復元素\n");
printf("0--退出\n");
}

Ⅳ 學生成績管理系統 設計說明的一些問題

void find(struct student *arr) /*定義查找函數*/
{
int j;(局部變數,用於後面循環比較)
char name[9]; /*用於接收用戶輸入的學生姓名*/(字元串數組,接收姓名)
char number[10]; /*用於接收用戶輸入的學生學號*/(字元串數組,接收學號)
system("cls"); /*清屏函數*/(清屏,開始)
printf("\n請輸入要查找的學生資料:\n");
printf("\n學生姓名:");
scanf("%s",name);(輸入姓名)
printf("\n學生學號:");
scanf("%s",number);(輸入學號)
for(j=0;j<count;j++) /*使用字元串比較函數查找兵書出符合條件的學生成績*/
{
if((strcmp(name,arr[j].name)==0)&&(strcmp(number,arr[j].number)==0))
{
printf("\n\t姓名\t學號\t性別\t數學\t英語\t總分\n");
printf("\t%-6s\t%-4s\t%-4s\t%-6.1f\t%-6.1f\t%-6.1f\n",
arr[j].name,arr[j].number,arr[j].sex,arr[j].math,arr[j].english,arr[j].math+arr[j].english);
break;
}
}
if(j>=count) /*如果沒找到,會從循環條件退出*/
printf("\n未找到該學生紀錄,請核對後重新查找!\n");
fflush(stdin); /*清空輸入緩沖區*/
printf("\n回車鍵返回上一功能菜單\n");
getchar();
}
後面的這個是一個順序查找的方法,用FOR循環來實現,通過strcmp這個字元串比較函數逐步比較姓名和學號,從1到count,這個count應該是前面定義的輸入的學生的總人數。

Ⅵ 跪求學生成績管理系統源代碼及詳細的設計過程和截圖

我要是最加,我就告訴你.

Ⅶ 學生成績管理系統有什麼設計原則

#包括
包括
結構學生{
詮釋身份證;
字元名稱[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;
}

,正如約瑟夫鏈表是相對簡單的,你拿去做可以做到這一點。

Ⅷ 演算法結構學生信息管理系統的詳細設計怎麼寫

你要用什麼語言寫啊?畢業設計啊?還是作業?

Ⅸ 學生成績管理系統的設計與實現

給一個我以前寫過的吧,功能應該差不多#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

Ⅹ 學生學籍管理系統詳細設計說明書

學籍管理系統軟體需求分析nbsp;________________________________________nbsp;編著nbsp;於博海、王利森、王艷梅、李岩、呂靖nbsp;1nbsp;引言nbsp;信息社會的高科技,商品經濟化的高效益,使計算機的應用已普及到經濟和社會生活的各個領域。計算機雖然與人類的關系愈來愈密切,還有人由於計算機操作不方便繼續用手工勞動。為了適應現代社會人們高度強烈的時間觀念,學籍管理系統軟體為教學辦公室帶來了極大的方便。該軟體是以漢語編程語言為實現語言,其功能在系統內部有源代碼直接完成。通過操作手冊,使用者可以了解本軟體的基本工作原理。操作人員只需輸入一些簡單的漢字、數字,即可達到自己的目標。nbsp;1.1nbsp;編寫目的nbsp;本需求的編寫目的在於研究學籍管理系統軟體的開發途徑和應用方法。nbsp;本需求的預期讀者是與學籍管理系統軟體開發有聯系的決策人,開發組成人員,扶助開發者,支持本項目的領導和公司人員,軟體驗證者。nbsp;1.2nbsp;背景及范圍nbsp;本項目的名稱:學籍管理系統開發軟體。nbsp;本項目的任務提出者及開發者是學籍管理系統軟體開發小組,用戶是教學辦公室。nbsp;本產品能具體化、合理化的管理學生的學籍檔案,用結構化的思維方式去了解計算機的基本工作原理和漢語程序設計語言。nbsp;1.3nbsp;定義nbsp;縮寫詞nbsp;略語nbsp;漢語程序設計語言:它是由北京元易達科技發展有限責任公司完全自主開發,完全自主版權的計算機語言,以漢語字詞為結構,最大限度的利用漢語本身的特點,是一種基於漢語基礎的通用的計算機的程序設計語言。nbsp;學籍管理系統:nbsp;學籍管理是幫助教學人員、行政人員對人事檔案的管理軟體。使用漢語編程語言,獨立完成其功能。nbsp;1.4nbsp;參考資料nbsp;amp;lt;amp;lt;漢語程序設計語言amp;gt;amp;gt;nbsp;--------沈志斌nbsp;編著nbsp;電子工業出版社nbsp;amp;lt;amp;lt;軟體工程amp;gt;amp;gt;nbsp;--------王利福nbsp;張世琨nbsp;朱冰nbsp;編著nbsp;北京大學出版社nbsp;amp;lt;amp;lt;資料庫原理及應用amp;gt;amp;gt;nbsp;--------李紹原nbsp;主編nbsp;科學出版社nbsp;2nbsp;項目概述nbsp;該學籍管理系統軟體目前已有比較完善的管理與使用功能,並且是計算機行業中用漢語編程來完成的新軟體成員。研製學籍管理系統軟體是為了滿足教學辦公室對學生檔案管理的方便,以現代化的創新思維模式去工作。nbsp;2.1nbsp;目標nbsp;2.1.1nbsp;開發意圖nbsp;a.nbsp;為了學籍管理系統更完善;nbsp;b.nbsp;為了教學辦公室對學生檔案的管理更方便;nbsp;c.nbsp;為了減輕行政人員的工作負擔。nbsp;2.1.2nbsp;應用目標nbsp;通過本系統軟體,能幫助教研人員利用計算機,快速方便的對學生學籍管理進行管理、輸入、輸出、查找的所需操作,使散亂的人事檔案能夠具體化,直觀化、合理化。nbsp;2.1.3nbsp;作用及范圍nbsp;本軟體適用於教育界,它是比較完善的系統管理軟體,對學生的學籍可以隨時輸入、輸出、查找。nbsp;2.1.4nbsp;背景nbsp;現今學籍管理的繁索給具有強烈時間觀念的行政人員帶來了諸多不便,教學辦公室缺少一種完善的學籍管理軟體,為了對學生檔案的管理方便,因此開發了本軟體。nbsp;2.2nbsp;產品描述nbsp;本產品是一種依賴於漢語編程為基礎的系統軟體,它是以漢語編程系統詞為基礎,用漢語程序設計語言進行編程的產品。nbsp;2.3nbsp;產品功能nbsp;2.3.1nbsp;外部功能nbsp;學籍管理系統軟體具有輸入、輸出、查找功能。nbsp;2.3.2nbsp;內部功能nbsp;該軟體集命令、編程、編輯於一體,完成過濾、定位顯示。nbsp;2.3.3nbsp;功能表nbsp;2.3.4nbsp;功能描述圖nbsp;2.3.5nbsp;用戶特點nbsp;本軟體的使用對象是教學辦公室工作人員。會漢語、懂計算機的基本操作就可以利用該軟體進行所需操作。同時也會對漢語編程有認識。nbsp;2.4nbsp;一般約束nbsp;a.nbsp;本項目的開發經費不超過1萬元;nbsp;b.nbsp;輔導老師2人,開發人員6人;nbsp;c.nbsp;在管理方針,硬體的限制,並行操作安全和保密方面無約束。nbsp;2.5nbsp;假設和依據nbsp;假設開發經費不到位,管理不完善,設計時沒能用全得到考慮,本項目的開發都將受到很大的影響。nbsp;3nbsp;具體需求nbsp;3.1nbsp;功能需求(一)nbsp;3.1.1nbsp;規格說明nbsp;輸入每個人的具體信息nbsp;3.1.2nbsp;引言nbsp;為了把個人信息(包括:學號、姓名、性別、年級、班級、系別、專業、戶口所在地、家庭住址、聯系電話、戶口分類、考前學歷、現今學歷、出生日期、民族、政治面貌、身份證號、文考准

熱點內容
武漢大學學生會輔導員寄語 發布:2021-03-16 21:44:16 瀏覽:612
七年級學生作文輔導學案 發布:2021-03-16 21:42:09 瀏覽:1
不屑弟高考成績 發布:2021-03-16 21:40:59 瀏覽:754
大學畢業證會有成績單 發布:2021-03-16 21:40:07 瀏覽:756
2017信陽學院輔導員招聘名單 發布:2021-03-16 21:40:02 瀏覽:800
查詢重慶2018中考成績查詢 發布:2021-03-16 21:39:58 瀏覽:21
結業考試成績怎麼查詢 發布:2021-03-16 21:28:40 瀏覽:679
14中醫醫師資格筆試考試成績查分 發布:2021-03-16 21:28:39 瀏覽:655
名著賞析課程標准 發布:2021-03-16 21:27:57 瀏覽:881
北京大學商業領袖高端培訓課程 發布:2021-03-16 21:27:41 瀏覽:919