c課程設計報告學生管理系統
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 35
char name;
int inth;
struct date
{
int year;
char month;
char day;
};
struct student
{
char no[9];
char name[9];
char sex[3];
struct date birthday;
int score[4];
};
int menu()
{
int code;
printf(" 菜單\n");
printf("┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓\n");
printf("┃ 0.退出 ┃\n");
printf("┃ 1.顯示學生信息 ┃\n");
printf("┃ 2.顯示按姓名排序後的學生信息 ┃\n");
printf("┃ 3.顯示按總分排序後的學生信息 ┃\n");
printf("┃ 4.按學號查學生分數和平均分數 ┃\n");
printf("┃ 5.按姓名查學生分數和平均分數 ┃\n");
printf("┃ 6.查各課程平均分數 ┃\n");
printf("┃ 7.查男女學生的人數 ┃\n");
printf("┃ 8.顯示學生信息表 ┃\n");
printf("┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n");
printf("選擇代碼(0,1,2,3,4,5,6,7,8): ");
scanf("%d",&code);
return code;
}
/* 建立學生信息數組 */
void readsi(struct student stud[],int *n)
{
FILE*fp;
int i;
if((fp=fopen("studf.txt","r"))==NULL)
{
printf("不能打開studf.txt文件!\n");
exit(1);
}
for(i=0;!feof(fp);i++)
{
(*n)++;
if(*n>N)
{
printf("最多處理35位學生信息!\n");
return;
}
fscanf(fp,"%s %s %s %d %d %d %d %d %d",stud[i].no,stud[i].name,stud[i].sex,&stud[i].birthday.year,&stud[i].birthday.month,&stud[i].birthday.day,&stud[i].score[0],&stud[i].score[1],&stud[i].score[2]);
// fscanf從一個流中執行格式化輸入
stud[i].score[3]=stud[i].score[0]+stud[i].score[1]+stud[i].score[2];
}
fclose(fp);
}
/* 顯示學生信息 */
void printsi(struct student *pstud,int n)
{
int i,k=0;
printf(" 學號 姓名 性別 年 月 日 數學 英語 C 總分\n");
printf("┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉\n");
printf("==================================================================\n");
for(i=0;i<n;i++)
{
printf("%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",pstud[i].no,pstud[i].name,pstud[i].sex,pstud[i].birthday.year,pstud[i].birthday.month,pstud[i].birthday.day,
pstud[i].score[0],pstud[i].score[1],pstud[i].score[2],pstud[i].score[3]);
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 按學號排序—簡單比較排序法*/
void csort_no(struct student *pstud,int n)
{
struct student temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strcmp(pstud[i].no,pstud[j].no)>0)
{
temp=pstud[i];
pstud[i]=pstud[j];
pstud[j]=temp;
}
}
/* 顯示學生信息表*/
void printtable(struct student *pstud,int n)
{
int i,k=0;struct student studA[N];
for(i=0;i<n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf("\n\n");
printf(" 學生信息表\n");
printf(" ==================\n\n");
printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");
printf("┃學號 ┃姓名 ┃ 性別 ┃ 年 月 日 ┃ 數學 ┃ 英語 ┃ C ┃ 總分 ┃\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
for(i=0;i<n;i++)
{
printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",studA[i].no,studA[i].name,studA[i].sex,studA[i].birthday.year,studA[i].birthday.month,studA[i].birthday.day,studA[i].score[0],studA[i].score[1],studA[i].score[2],studA[i].score[3]);
if(i==n-1)
printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");
else
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 查各課程平均分數 */
void find_ave(struct student *pstud,int n)
{
static summath=0,sumenglish=0,sumC=0,score=0;int i;struct student studA[N];
for(i=0;i<n;i++)
studA[i]=pstud[i];
csort_no(studA,n);
printf(" 各課程平均分數 \n ");
printf("————————————————————————————\n");
for(i=0;i<n;i++)
{
summath=summath+pstud[i].score[0];
sumenglish=sumenglish+pstud[i].score[1];
sumC=sumC+pstud[i].score[2];
score=score+pstud[i].score[3];
}
printf("數學平均分數:%4d\n",summath/n);
printf("英語平均分數:%4d\n",sumenglish/n);
printf("c平均分數:%4d\n",sumC/n);
printf("總分平均分數:%5d\n",score/n);
}
/* 查男女學生人數 */
void find_pnum(struct student *pstud,int n)
{
int i,j=0,k=0;
for(i=0;i<n;i++)
{
if(strcmp(pstud[i].sex,"男")==0)
j++;
else
k++;
}
printf("男學生人數為%d人",j);
printf("女學生人數為%d人",k);
}
/* 按總分遞減選擇排序(應用指針數組)*/
void ssort(struct student *ptscore[],int n)
{
struct student *temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(ptscore[j]->score[3]<ptscore[j+1]->score[3])
{
temp=ptscore[j];
ptscore[j]=ptscore[j+1];
ptscore[j+1]=temp;
}
}
/* 按學號查學生信息和平均分數(順序查找)*/
void ssrch_no(struct student *pstud[],int n)
{
int i=0,j=0;char no[9];
printf("請輸入要查找的學生學號:");
scanf("%s",&no);
printf("\n");
for(i=0;i<n;i++)
{
if(strcmp(no,pstud[i]->no)==0)
printf("已找到學號為%-8s的學生\n學號:%-8s\n姓名:%-8s\n性別:%-2s\n%4d年%2d月%2d日\n數學:%4d\n英語:%4d\nc:%4d\n總分%4d\n平均分數為:%4d\n",pstud[i]->no,pstud[i]->no,pstud[i]->name,pstud[i]->sex,pstud[i]->birthday.year,pstud[i]->birthday.month,pstud[i]->birthday.day,pstud[i]->score[0],pstud[i]->score[1],pstud[i]->score[2],pstud[i]->score[3],pstud[i]->score[3]/3);
else
j++;
}
if(j==6)
printf("未找到學號為%-8s的學生\n",no);
}
/* 按姓名查找的學生信息和平均分數(折半查找)*/
void bsrch_name(struct student *pname[],int n)
{
int bsrch(struct student *pname[],int n,char *name);
char name[9];int i;
printf("請輸入要查找的學生姓名:");
scanf("%s",name);
i=bsrch(pname,n,name);
if(i!=-1)
printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
printf("%d沒有找到該學生資料!\n",name);
for(;;)
{ i=i-1;
if(strcmp(name,pname[i]->name)==0) printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
break;
}
i=bsrch(pname,n,name);
for(;;)
{i=i+1;
if(strcmp(name,pname[i]->name)==0) printf("已找到該學生,學生信息:%-8s %-8s %-2s %4d %2d %2d %4d %4d %4d %5d\n",
pname[i]->no,pname[i]->name,pname[i]->sex,
pname[i]->birthday.year,pname[i]->birthday.month,
pname[i]->birthday.day,
pname[i]->score[0],pname[i]->score[1],pname[i]->score[2],
pname[i]->score[3]);
else
break;
}
}
int bsrch(struct student *pname[],int n,char *name)
{
int lower=0,upper=n-1,mid;
if(strcmp(name,pname[lower]->name)==0) return lower;
else if(strcmp(name,pname[upper]->name)==0) return upper;
else
while(lower<=upper)
{
mid=(lower+upper)/2;
if(strcmp(name,pname[mid]->name)==0)
return mid;
else if(strcmp(name,pname[mid]->name)>0)
lower=mid+1;
else
upper=mid-1;
}
return -1;
}
/* 按姓名遞增冒泡排序(應用指針數組) */
void bsort(struct student *pname[],int n)
{
struct student *temp;
int i,j;
for(i=0;i<n-1;i++)
for(j=0;j<n-i-1;j++)
if(strcmp(pname[j]->name,pname[j+1]->name)>0)
{
temp=pname[j];
pname[j]=pname[j+1];
pname[j+1]=temp;
}
}
/* 按總分名次查找的學生信息和平均分數 */
void printf_ptscore(struct student *ptscore[],int n,int inth)
{
printf("請輸入要查找總分名次:");
scanf("%d",&inth);
inth--;
if(inth>n)
{
printf("未找到總分名次為%5d的學生",inth);
}
else
printf("已找到總分名次為%5d的學生\n學號:%-8s\n姓名:%-8s\n性別:%-2s\n%4d年%2d月%2d日\n數學:%4d\n英語:%4d\nc:%4d\n總分%5d\n平均分數為:%4d",inth+1,ptscore[inth]->no,ptscore[inth]->name,ptscore[inth]->sex,ptscore[inth]->birthday.year,ptscore[inth]->birthday.month,ptscore[inth]->birthday.day,ptscore[inth]->score[0],ptscore[inth]->score[1],ptscore[inth]->score[2],ptscore[inth]->score[3],ptscore[inth]->score[3]/3);
}
/*顯示姓名排序後的學生信息*/
void printsi_p1(struct student *parray[],int n)
{
int i,k=0;
printf(" 按姓名排序後的學生信息\n\n");
printf("學號 姓名 性別 年 月 日 數學 英語 C 總分\n");
printf("******** ------ ** ---- ** -- *** --- *** --- \n");
printf("=====================================================\n");
for(i=0;i<n;i++)
{
printf("%-8s%-8s%-2s%4d %2d %2d %4d %4d %4d %5d\n",
parray[i]->no,parray[i]->name,parray[i]->sex,
parray[i]->birthday.year,parray[i]->birthday.month,parray[i]->birthday.day,
parray[i]->score[0],parray[i]->score[1],parray[i]->score[2],parray[i]->score[3]);
k++;
if(k%20==0)
scanf("%*c");
}
}
/* 顯示按總分排序後的學生信息 */
void printsi_p2(struct student *ptscore[],int n)
{
int i,k=0;
printf("\n\n");
printf(" 按總分排序後的學生信息表\n");
printf(" ==================\n\n");
printf("┏━━━━┳━━━━┳━━━┳━━━━━━┳━━━┳━━━┳━━━┳━━━┓\n");
printf("┃學號 ┃姓名 ┃ 性別 ┃ 年 月 日 ┃ 數學 ┃ 英語 ┃ C ┃ 總分 ┃\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
for(i=0;i<n;i++)
{
printf("┃%-8s┃%-8s┃ %-2s ┃ %4d %2d %2d ┃ %4d ┃ %4d ┃ %4d ┃ %4d ┃\n",ptscore[i]->no,ptscore[i]->name,ptscore[i]->sex,ptscore[i]->birthday.year,ptscore[i]->birthday.month,ptscore[i]->birthday.day,ptscore[i]->score[0],ptscore[i]->score[1],ptscore[i]->score[2],ptscore[i]->score[3]);
if(i==n-1)
printf("┗━━━━┻━━━━┻━━━┻━━━━━━┻━━━┻━━━┻━━━┻━━━┛\n");
else
printf("┣━━━━╋━━━━╋━━━╋━━━━━━╋━━━╋━━━╋━━━╋━━━┫\n");
k++;
if(k%20==0)
scanf("%*c");
}
}
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 35
void main()
{
static struct student stud[N];
struct student *pstud[N];
struct student *pname[N];
struct student *ptscore[N];
int code,inth=0;
int n=0,i;
readsi(stud,&n);
for(i=0;i<N;i++)
pstud[i]=&stud[i];
for(i=0;i<N;i++)
pname[i]=&stud[i];
for(i=0;i<N;i++)
ptscore[i]=&stud[i];
bsort(pname,n);
ssort(ptscore,n);
printf("\n 學生信息:\n");
printsi(stud,n);
printf("\n 按<Enter>,進入菜單:\n");
scanf("%*c");
while(1)
{
code=menu();
switch(code)
{
case 0: /* 退出 */
exit(1);
case 1: /* 顯示學生信息 */
printsi(stud,n);
scanf("%*2c");break;
case 2: /* 顯示按姓名排序後的學生信息 */
printsi_p1(pname,n);
scanf("%*2c");break;
case 3: /* 顯示按總分排序後的學生信息 */
printsi_p2(ptscore,n);
scanf("%*2c");break;
case 4: /* 按學號查找學生信息和平均分數 */
ssrch_no(pstud,n);
scanf("%*2c");break;
case 5: /* 按姓名查找學生信息和平均分數 */
bsrch_name(pname,n);
scanf("%*2c");break;
case 6: /* 查各門課的平均分數 */
find_ave(stud,n);
scanf("%*2c");break;
case 7: /* 查男女人數 */
find_pnum(stud,n);
scanf("%*2c");break;
case 8: /* 顯示學生信息表 */
printtable(stud,n);
scanf("%*2c");break;
}
}
}
㈡ c語言課程設計報告學生信息管理系統
在網路輸入"學生信息管理系統",可以參考一下
㈢ C語言課程設計 學生信息管理系統 報告
在網路輸入"學生信息管理系統",可以參考一下
請採納答案,支持我一下。
㈣ c語言課程設計要求寫一個學生信息管理系統
這,,,徐工的?
㈤ C語言課程設計 學生管理系統設計
學生管理系統設計
我幫你弄
保證能運行
Q我
㈥ c語言課程設計 學生信息管理系統源代碼及實驗報告
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 8
char name[N][N*2];
char sex[N/4];
int number[N];
int jugment(char *dest,int size)
{
(dest,size,stdin);
while(dest[0]=='#')
return 1;
return 0;
}
int menu()
{
char ch[N];
puts("1) insert_data!");
puts("2) search_data!");
puts("3) list!");
puts("#) exit!");
fgets(ch,N/2,stdin);
return ch[0];
}
int insert_data()
{
int i;
char ch[N*2];
for(i=0;i<N;i++)
{
//**********************************************input name
printf("the num %d student:\n",i+1);
puts("name:");
while(jugment(ch,N*2))
return 0;
ch[strlen(ch)]==0;
strcpy(name[i],ch);
//**********************************************input sex
do
{
puts("sex <w/m>:");
if(jugment(ch,N))
return 0;
sex[i]=ch[0];
}
while((sex[i]!='w')&&(sex[i]!='m'));
//**********************************************input id
do
{
puts("number:");
if(jugment(ch,N*2))
return 0;
}while(!(number[i]=atoi(ch)));
}
}
int search_data(void)
{
int i,tmp;
char ch[N*2];
while(1)
{
puts("input your number:");
if(jugment(ch,N*2))
return -1;
if(!(tmp=atoi(ch)))
continue;
for(i=0;i<N;i++)
{
if(number[i]==tmp)
return i;
}
if(i>=N)
puts("not have this student!");
return -1;
}
}
int print_data(int num)
{
if(num>=0)
{
puts("*********************************");
printf("name: %s",name[num]);
printf("sex: %c\n",sex[num]);
printf("number: %d\n",number[num]);
puts("*********************************");
}
return 0;
}
int list()
{
int i=0;
while(*name[i]&&i<N)
{
print_data(i);
i++;
}
return 0;
}
int main()
{
char tmp;
while(1)
{
tmp=menu();
switch(tmp)
{
case '1':
insert_data();
break;
case '2':
print_data(search_data());
break;
case '3':
list();
case '#':
return 0;
default:
puts("you input wrong command!");
break;
}
}
}
這個是簡易版的 可供參考!