『壹』 c語言 學生管理系統
太煩了,簡短一點比較好!
『貳』 c語言編寫學生信息管理系統
稍微用了點c++(你給的分太低)
如下圖所示:
studf.txt
操作日誌文件:
『叄』 用C語言編寫學生管理系統界面
已經在VC6.0上運行確認:
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[20];/*學生學號*/
char studentName[20];/*學生姓名*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink; /*鏈表表頭指針*/
/*函數聲明*/
void ReadInfoFormFile();
void Menu();
void CreateHeadLink();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentName();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void ChangeMarkByName();
void ChangeMarkByNumber();
void SaveLinkToFile();
void paixu();
void DesplayMarkSegment();
int choose;/*用於接受用戶的選擇*/
/*主函數*/
void main()
{
printf("\n\t\t\t歡迎進入學生成績管理系統\n\n\n");
printf("\t\t\t\tO(∩_∩)O\n\n\n\n");
printf("\t\t\t^_^\t\t\t^_^\n\n");
printf("\n\t\t 注意:請按照要求輸入相應信息,謝謝!\n\n\n\n\n");
printf("\t\t\t 按任意鍵進入…………");
getch();
CreateHeadLink();
ReadInfoFormFile();
Menu();
}
/*從文件中讀學生信息到鏈表中*/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*顯示菜單,根據用戶的輸入完成相應的功能*/
void Menu(void)
{
STUDENT *p;
printf("\t\t (^o^)歡迎使用學生成績管理系統(^o^)\n\n");
printf("\t ※--------------------請選擇相應功能---------------------※\n\n");
printf("\t 1: 顯示所有學生的信息 |");
printf(" \t 2: 按姓名查詢 |\n\n");
printf("\t 3: 按學號查詢 |");
printf(" \t\t 4: 增加學生 |\n\n");
printf("\t 5: 刪除學生 |");
printf(" \t\t 6: 按姓名修改學生成績 |\n\n");
printf("\t 7: 按學號修改學生成績 |");
printf(" \t 8: 保存所有學生信息 |\n\n");
printf("\t 9: 按成績輸出學生信息 |");
printf("\t 10: 顯示不及格及優秀學生 |\n\n");
printf("\t 11: 返回主菜單 |");
printf("\t\t 12: 退出 |\n\n");
printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");
printf("\t 請輸入對應數字:");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:
OutputInformation();/*顯示所有學生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4:
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6:
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7:
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8:
SaveLinkToFile();/*保存數據*/
break;
case 9:
paixu();break;
case 10:
DesplayMarkSegment();break;
case 11:
break;
case 12:
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
break;
default: break;
}
Menu();/*遞歸調用*/
}
/*建立鏈表表頭*/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/*申請一個新結點,並將其初始化*/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
memset(p->studentNumber,NULL,20);
for(i=0;i<20;i++)
memset(p->studentName,NULL,20);
for(i=0;i<20;i++)
memset(p->className,NULL,20);
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/*取得用戶輸入的學生信息*/
void GetInformation(STUDENT *t)
{
printf("請輸入學生學號:");
scanf("%s",t->studentNumber);
printf("請輸入學生姓名:");
scanf("%s",t->studentName);
printf("請輸入該生所在班級:");
scanf("%s",t->className);
printf("請輸入第1門成績:");
scanf("%f",&(t->mark1));
printf("請輸入第2門成績:");
scanf("%f",&(t->mark2));
printf("請輸入第3門成績:");
scanf("%f",&(t->mark3));
}
/*在鏈表的結尾處增加一個結點*/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*根據用戶輸入的學生姓名顯示該學生的信息*/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("請輸入學生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {
printf("\t 對不起,不存在姓名為 %s 的學生\n",studentName);}
}
/*根據用戶輸入的學號顯示該學生的信息*/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
p=headLink->next;
printf("請輸入學生學號:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {
printf("\t 對不起,不存在學號為 %s 的學生\n",studentNumber);
}}
/*輸出一個結點的信息*/
void DesplayOneNode(STUDENT *t)
{
printf("\t%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/*根據用戶輸入的學號刪除該學生*/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("\t 不存在該學號的學生\n");
return;
}
printf("\t 成功刪除\n");
}
/*顯示所有學生的信息*/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("\t 現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/*根據輸入的姓名修改成績*/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag) {
printf("\t 對不起,不存在姓名為 %s 的學生\n",studentName);
} }
/*根據輸入的姓名修改成績*/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生學號:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag){
printf("\t 對不起,不存在學號為 %s 的學生\n",studentNumber);
}}
/*保存鏈表數據到文件中*/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("\t 現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/*顯示優秀和不及格學生成績*/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("\t60分以下(不及格)的學生成績如下:\n");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就認為該生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t不及格的學生一共有%d人\n",count);
p=headLink->next;
printf("\t成績優秀的學生成績如下:\n");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t成績優秀的學生一共有%d人\n",count);
}
/*按總成績排序*/
void paixu(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("\t 現在還沒學生信息,請先輸入學生信息\n");
return;
}
while(r)/*兩層while循環實現排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結點信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(q->studentNumber,p->studentNumber);/*再復制p結點信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最後復制exchange結點信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
『肆』 c語言學生管理系統
C 語言學生成績管理系統
#include<stdio.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[20];/*學生學號*/
char studentName[20];/*學生姓名*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink; /*鏈表表頭指針*/
/*函數聲明*/
void ReadInfoFormFile();
void Menu();
void CreateHeadLink();
STUDENT *MallocNode();
void GetInformation(STUDENT *t);
void OutputInformation();
void DesplayInfoBystudentName();
void DesplayInfoBystudentNumber();
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber();
void ChangeMarkByName();
void ChangeMarkByNumber();
void SaveLinkToFile();
void paixu();
void DesplayMarkSegment();
int choose;/*用於接受用戶的選擇*/
/*主函數*/
main()
{
system("color 2a");
printf("\n\t\t歡迎進入***學院***班學生成績管理系統\n\n\n");
printf("\t\t\t\tO(∩_∩)O\n\n\n\n");
printf("\t\t\t^_^\t\t\t^_^\n\n");
printf("\n\t\t 注意:請按照要求輸入相應信息,謝謝!\n\n\n\n\n");
printf("\t\t\t\t\t\t\t\t製作人:***\n\n\n");
printf("\t\t\t 按任意鍵進入…………");
getch();
system("cls");
CreateHeadLink();
ReadInfoFormFile();
Menu();
}
/*從文件中讀學生信息到鏈表中*/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%f%f%f",p->studentNumber,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/*顯示菜單,根據用戶的輸入完成相應的功能*/
void Menu(void)
{
STUDENT *p;
printf("\t\t (^o^)歡迎使用學生成績管理系統(^o^)\n\n");
printf("\t ※--------------------請選擇相應功能---------------------※\n\n");
printf("\t 1: 顯示所有學生的信息 |");
printf(" \t 2: 按姓名查詢 |\n\n");
printf("\t 3: 按學號查詢 |");
printf(" \t\t 4: 增加學生 |\n\n");
printf("\t 5: 刪除學生 |");
printf(" \t\t 6: 按姓名修改學生成績 |\n\n");
printf("\t 7: 按學號修改學生成績 |");
printf(" \t 8: 保存所有學生信息 |\n\n");
printf("\t 9: 按成績輸出學生信息 |");
printf("\t 10: 顯示不及格及優秀學生 |\n\n");
printf("\t 11: 返回主菜單 |");
printf("\t\t 12: 退出 |\n\n");
printf("\t ※----------------------O(∩_∩)O------------------------※\n\n");
printf("\t 請輸入對應數字:");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:system("cls");
OutputInformation();/*顯示所有學生的信息*/
break;
case 2: system("cls");
DesplayInfoBystudentName();
break;
case 3: system("cls");
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4: system("cls");
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5: system("cls");
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6: system("cls");
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7: system("cls");
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8: system("cls");
SaveLinkToFile();/*保存數據*/
break;
case 9: system("cls");
paixu();break;
case 10: system("cls");
DesplayMarkSegment();break;
case 11: system("cls");
break;
case 12: system("cls");
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
exit(1);
break;
default: system("cls"); break;
}
Menu();/*遞歸調用*/
}
/*建立鏈表表頭*/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/*申請一個新結點,並將其初始化*/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber='\0';
for(i=0;i<20;i++)
p->studentName='\0';
for(i=0;i<20;i++)
p->className='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->next=NULL;
return p;
}
/*取得用戶輸入的學生信息*/
void GetInformation(STUDENT *t)
{
printf("請輸入學生學號:");
scanf("%s",t->studentNumber);
printf("請輸入學生姓名:");
scanf("%s",t->studentName);
printf("請輸入該生所在班級:");
scanf("%s",t->className);
printf("請輸入第1門成績:");
scanf("%f",&(t->mark1));
printf("請輸入第2門成績:");
scanf("%f",&(t->mark2));
printf("請輸入第3門成績:");
scanf("%f",&(t->mark3));
}
/*在鏈表的結尾處增加一個結點*/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/*根據用戶輸入的學生姓名顯示該學生的信息*/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("請輸入學生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{system("cls");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 對不起,不存在姓名為 %s 的學生\n",studentName);}
}
/*根據用戶輸入的學號顯示該學生的信息*/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
p=headLink->next;
printf("請輸入學生學號:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{ system("cls");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 對不起,不存在學號為 %s 的學生\n",studentNumber);
}}
/*輸出一個結點的信息*/
void DesplayOneNode(STUDENT *t)
{
printf("\t%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark1+t->mark2+t->mark3);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3)/3);
}
/*根據用戶輸入的學號刪除該學生*/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{ system("cls");
printf("\t 不存在該學號的學生\n");
return;
}
system("cls");
printf("\t 成功刪除\n");
}
/*顯示所有學生的信息*/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("\t 現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/*根據輸入的姓名修改成績*/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生姓名:");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag) {system("cls");
printf("\t 對不起,不存在姓名為 %s 的學生\n",studentName);
} }
/*根據輸入的姓名修改成績*/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3;
p=headLink->next;
printf("請輸入學生學號:");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag){system("cls");
printf("\t 對不起,不存在學號為 %s 的學生\n",studentNumber);
}}
/*保存鏈表數據到文件中*/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("\t 現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %f %f %f\n",p->studentNumber,p->studentName,p->className,p->mark1,p->mark2,p->mark3);
p=p->next;
}
fclose(fp);
}
/*顯示優秀和不及格學生成績*/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("\t60分以下(不及格)的學生成績如下:\n");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10))))/*只要有一科不及格就認為該生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t不及格的學生一共有%d人\n",count);
p=headLink->next;
printf("\t成績優秀的學生成績如下:\n");
printf("\t學號\t姓名\t班級\t成績1\t成績2\t成績3\t總成績\t平均成績\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("\t成績優秀的學生一共有%d人\n",count);
}
/*按總成績排序*/
void paixu(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("\t 現在還沒學生信息,請先輸入學生信息\n");
return;
}
while(r)/*兩層while循環實現排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3)>(p->mark1+p->mark2+p->mark3))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結點信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
strcpy(q->studentNumber,p->studentNumber);/*再復制p結點信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark3;
q->mark3=p->mark3;
strcpy(p->studentNumber,exchange.studentNumber);/*最後復制exchange結點信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
『伍』 C語言學生管理系統
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define max 20
typedef struct student //學生
{
char sno[max]; // 學號
char sname[max]; //姓名
char sex[max]; //性別
char age[max]; //年齡
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年級
struct student* next;
} student;
student* head;
int LogOn() //登錄模塊,已實現輸入密碼不回顯,如果中途發現輸錯某幾位,可退格鍵重輸
{
char username[max],password[max];
printf("\n請輸入用戶名:");
scanf("%s",username);
printf("\n請輸入密碼(最多15位):");
//開始以不回顯且支持退格方式獲取輸入密碼
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//條件i>=0是用於限制退格的范圍
{
if(password[i-1]=='\b')//對退格鍵的處理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';
//已獲取密碼。驗證用戶身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登錄成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用來建新結點,ptr用來暫存頭結點
do
{
s=(student*)malloc(sizeof(student)); // 新建一個學生結點
printf("\n開始注冊..."); //開始注冊
printf("\n請輸入該學生的學號:");
scanf("%s",s->sno);
printf("\n請輸入該學生的姓名:");
scanf("%s",s->sname);
printf("\n請輸入該學生的性別:");
scanf("%s",s->sex);
printf("\n請輸入該學生的年齡:");
scanf("%s",s->age);
printf("\n請輸入該學生的系:");
scanf("%s",s->depart);
printf("\n請輸入該學生所在的班:");
scanf("%s",s->classs);
printf("\n請輸入該學生所在的年級");
scanf("%s",s->grade);
ptr=head;
head=s;//將新結點插入隊頭
s->next=ptr;
fflush(stdin);
printf("\n請問是否繼續注冊?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
return;
}
void ElePrint(char str[]) //輸出單個元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//為了對齊輸出,需插入一些空格
return;
}
int LinePrint(student *ptr) //輸出一行
{
if(ptr==NULL) //檢查傳進來的指針
return 0;
printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);
return 1;
}
void print() //輸出全部學生信息
{
student *ptr=head;
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查詢模塊
{
int method;//查詢方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用來接收查詢關鍵字
while(1)
{
printf("\n請選擇查詢方式");
printf("\n1.按學號查詢");
printf("\n2.按姓名查詢");
printf("\n3.按所在系查詢");
printf("\n4.按所在班級查詢");
printf("\n5.按所在年級查詢");
printf("\n6.列印全部學生信息");
printf("\n7.返回主菜單\n");
scanf("%d",&method);
student *p=head,*temp;
switch(method)
{
case 1:
printf("\n請輸入要查詢的學號:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
LinePrint(p);
break;
case 2:
printf("\n請輸入要查詢的姓名:");
scanf("%s",name);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("\n請輸入學生所在的系:");
scanf("%s",departm);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("\n請輸入學生所在的班:");
scanf("%s",clss);
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 5:
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 6:
print();
break;
case 7:
return;
default:
printf("很抱歉,暫無此查詢方式!");
break;
}
}
}
void modify()//修改學生信息
{
char num[max];
student *p=head;
printf("\n請輸入要修改的學生的學號:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n錯誤:沒有此學生的信息!\n");
return;
}
LinePrint(p);
printf("\n請輸入要修改的該學生的信息:");
printf("\n1.姓名");
printf("\n2.性別");
printf("\n3.年齡");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年級");
char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n請輸入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}
LinePrint(p);
return;
}
void del()// 刪除某學生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n請輸入要刪除的學生的學號:");
scanf("%s",num1);
while(p)//查找該學生所在的結點
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}
}//while
if(!p)
{
printf("\n不存在此學生的信息.");
return;
}
LinePrint(p);//輸出該學生的信息
printf("\n請問真的要刪除該學生的信息嗎?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已經刪除該學生的信息.");
}
return;
}
void sort() //排序模塊。將學生記錄按學號從小到大排列。用起泡排序演算法實現
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//統計鏈表結點個數
{
count++;
s=s->next;
}
for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr處於隊頭時
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr處於隊頭時
p=head;
else
p=p->next;
}
}
}
return;
}
void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}
int main()
{
int option;
printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n歡迎使用學生信息管理系統!\n");
//登錄模塊
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("\n連續登錄三次不成功,退出!");
exit(0);
}
//系統界面
while(1)
{
printf("\n\n請選擇需要的服務:");
printf("\n1.注冊");
printf("\n2.查詢");
printf("\n3.修改");
printf("\n4.刪除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}
}
return 0;
}
『陸』 學生管理系統C語言
#include<stdio.h>
#define N 30
int Input1(long xuehao[],int score[],int n);
int Sum(int score[],int n);
int No3(long xuehao[],int score[],int n);
int No4(long xuehao[],int score[],int n);
int No5(long xuehao[],int score[],int n);
int No6(int score[],int n);
int Input1(long xuehao[],int score[],int n){
int i;
printf("輸入學號和成績\n");
for(i=0;i<n;i++){
scanf("%ld %d",&xuehao[i],&score[i]);
}
// for(i=0;i<n;i++){
// printf("學號%ld 成績%d\n",xuehao[i],score[i]);
//}
}
int Sum(int score[],int n){
int sum;
float aver;
sum=0; aver=0;
int i;
for(i=0;i<n;i++){
sum=sum+score[i];
}
aver=(float)sum/n;
printf("總分為%d,平均分為%.2f",sum,aver);
}
int No3(long xuehao[],int score[],int n){
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(score[j]>score[k]){ k=j; }
}
if(k!=i){
/*交換成績*/
temp1=score[k];score[k]=score[i];score[i]=temp1;
/*交換學號*/
temp2=xuehao[k];xuehao[k]=xuehao[i];xuehao[i]=temp2;
}
}
int a;
printf("按成績高低排序\n");
for(a=0;a<n;a++){
printf("學號%ld 成績%d\n",xuehao[a],score[a]);
}
}
int No4(long xuehao[],int score[],int n){
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(xuehao[j]>xuehao[k]){ k=j; }
}
if(k!=i){
/*交換學號*/
temp1=xuehao[k];xuehao[k]=xuehao[i];xuehao[i]=temp1;
/*交換成績*/
temp2=score[k];score[k]=score[i];score[i]=temp2;
}
}
int a;
printf("按學號排序\n");
for(a=0;a<n;a++){
printf("學號%ld 成績%d\n",xuehao[n-1-a],score[n-1-a]);
}
}
int No5(long xuehao[],int score[],int n){
int i,a;
long x;
No3(xuehao,score,n);
printf("輸入學號\n");
scanf("%ld",&x);
for(i=0;i<n;i++){
if(xuehao[i]==x){
a=i;
break;
}
}
printf("學號%ld 成績%d 排名%d\n ",xuehao[a],score[a],a+1);
}
int No6(int score[],int n){
int i;
int a=0,b=0,c=0,d=0,e=0;
float a1,b1,c1,d1,e1;
for(i=0;i<n;i++){
if(score[i]>=90) {a++; }
else if(score[i]>=80){b++; }
else if(score[i]>=70) {c++; }
else if(score[i]>=60) {d++; }
else {e++; printf("e is%d",e);}
}
a1=(float)a/n*100;b1=(float)b/n*100;c1=(float)c/n*100;d1=(float)d/n*100;e1=(float)e/n*100;
printf("優秀%d %.1f%%\n良好%d %.1f%% \n中等%d %.1f%% \n及格%d %.1f%%\n不及格%d %.1f%%\n",a,a1,b,b1,c,c1,d,d1,e,e1);
// printf("%.2f %.2f %.2f %.2f %.2f\n",a1,b1,c1,d1,e1);
}
int No7(long xuehao[],int score[],int n){
int i;
for(i=0;i<n;i++){
printf("學號%ld 成績%d\n",xuehao[i],score[i]);
}
Sum(score,n);
}
main(){
int score[N];
long xuehao[N];
int n;
printf("1.Input record\n");
printf("2.caculate total and average score of course\n");
printf("3.sort in descending order by score\n");
printf("4.sort in ascending order by score\n");
printf("5.search by number \n");
printf("6.statistic analysis\n");
printf("7.list record\n");
printf("0.exit\n");
int num;
printf("人數(不許超過30!不許超過30!不許超過30)\n");
do{scanf("%d",&n);}while(n<1 || n>30);
if(n>30) printf("wrong!\n");
//printf("輸入選項\n");
//scanf("%d",&num);
int p=1; //控制結束
do{
printf("輸入選項\n");
scanf("%d",&num);
switch(num){
case 1:
Input1(xuehao,score,n);
break;
case 2: Sum(score,n);
break;
case 3: No3(xuehao,score,n);
break;
case 4: No4(xuehao,score,n);
break;
case 5: No5(xuehao,score,n);
break;
case 6: No6(score,n);
break;
case 7: No7(xuehao,score,n);
break;
case 0: p=-1;
break;
}
}while(p!=-1);
return 0;
}
『柒』 用C語言編寫一個學生管理系統。
概述
單純只用多個數組管理學生成績信息,不使用結構體,該程序最主要的難點是依據學號或總成績對學生信息進行排序,藉助了臨時數組來標記排好序的下標。
運行結果如下:
輸入數據:
貼上代碼(有點多)
#include <stdio.h>
#include <stdlib.h> //exit函數頭文件
#include <string.h> //字元串相關操作頭文件
#define MAX_STUDENT 30 //最大學生數
//函數聲明,本程序共10個子函數,每個函數對應一個操作
void student_scanf(int n);
void student_printf(int n);
int student_find_name(int n);
int student_find_num(int n);
void student_sort_num(int n);
void student_sort_sum(int n);
int student_alter_num(int n);
int student_alter_name(int n);
int student_delete_num(int n);
int student_delete_name(int n);
//全局數組變數,用於存儲學生信息
char names[MAX_STUDENT][50];
int math[MAX_STUDENT];
int english[MAX_STUDENT];
int computer[MAX_STUDENT];
int sum[MAX_STUDENT];
int num[MAX_STUDENT];
//以下變數用於學生信息數組排序,作為臨時數組
int temp_num[MAX_STUDENT];
char temp_names[MAX_STUDENT][50];
int temp_math[MAX_STUDENT];
int temp_english[MAX_STUDENT];
int temp_computer[MAX_STUDENT];
int temp_sum[MAX_STUDENT];
//sort數組存儲排好序的學號或姓名下標
int sort[MAX_STUDENT];
//循環全局變數
int i, j;
//main主函數
int main(void)
{
int choice,n;
while (1)
{
printf("************************************* ");
printf("歡迎使用學生成績管理系統 ");
printf("[1] 輸入所有學生信息 ");
printf("[2] 輸出所有學生成績 ");
printf("[3] 按學號查找某個學生信息 ");
printf("[4] 按姓名查找某個學生信息 ");
printf("[5] 按學號對學生排序 ");
printf("[6] 按總成績對學生排序 ");
printf("[7] 按學號修改某個學生信息 ");
printf("[8] 按姓名修改某個學生信息 ");
printf("[9] 按學號刪除某個學生信息 ");
printf("[10] 按姓名刪除某個學生信息 ");
printf("[0] 退出程序 ");
printf("請輸入您的選擇(0 - 9):");
scanf("%d",&choice);
printf("**************************************) ");
switch (choice)
{
case 1://錄入;
printf("請輸入錄入的學生信息數: ");
scanf("%d",&n);
student_scanf(n);
break;
case 2://輸出;
student_printf(n);
break;
case 3://根據學號查找
student_find_num(n);
break;
case 4://根據姓名查找
student_find_name(n);
break;
case 5://按學號排序
student_sort_num(n);
break;
case 6://按姓名排序
student_sort_sum(n);
break;
case 7://按學號修改
student_alter_num(n);
break;
case 8://按姓名修改
student_alter_name(n);
break;
case 9://按學號刪除
student_delete_num(n);
n--;
break;
case 10://按姓名刪除
student_delete_name(n);
n--;
break;
case 0://退出程序
printf("退出程序 ");
printf("程序結束,謝謝使用! ");
exit(0);
default:
printf("您輸入的菜單有誤。請重新輸入! ");
}
}
return 0;
}
//1.輸入信息
void student_scanf(int n)
{
for (i = 0; i<n; ++i)
{
printf(" 請輸入第%d個學生的信息: ", i + 1);
printf(" 學號:");
scanf("%d", &num[i]);
printf(" 姓名:");
scanf("%s", names[i]);
printf(" 數學成績:");
scanf("%d", &math[i]);
printf(" 英語成績:");
scanf("%d", &english[i]);
printf(" 計算機成績:");
scanf("%d", &computer[i]);
//計算總成績
sum[i] = math[i] + english[i] + computer[i];
}
}
//2.列印信息
void student_printf(int n)
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("---------------------------------------------------------- ");
for (i = 0; i<n; ++i)
{
printf("%d %s %d %d %d %d ", num[i], names[i], math[i], english[i], computer[i], sum[i]);
}
printf("------------------------------------------------------- ");
}
//3.按學號查找
int student_find_num(int n)
{
int nums;
int result;
printf("請輸入待查找的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else
{
//先列印表頭
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
//再列印數據
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("列印出查找結果! ");
}
return 1;
}
//4.用姓名查找成績
int student_find_name(int n)
{
char name[200];
int result;
printf("請輸入待查找的學生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到結果
printf("沒有該學生信息! ");
return 0;
}
else//找到結果
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("已完成查找! ");
}
return 1;
}
//5.按學號排序
void student_sort_num(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_num[i] = num[i];
}
max = 0; //查找學號最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_num[max]<temp_num[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找學號最小值
for(j=0; j<n; ++j)
{
if(temp_num[min]>temp_num[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_num[min] = temp_num[max]; //利用臨時數組將查找過的學生信息的學號設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//6.按總成績排序
void student_sort_sum(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_sum[i] = sum[i];
}
max = 0; //查找總成績最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_sum[max]<temp_sum[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找總成績最小值
for(j=0; j<n; ++j)
{
if(temp_sum[min]>temp_sum[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用臨時數組將查找過的學生信息的總成績設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//7.按學號修改學生信息
int student_alter_num(int n)
{
int nums;
int result;
printf("請輸入待修改的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//8.按姓名修改學生信息
int student_alter_name(int n)
{
char name[50];
int result;
printf("請輸入待修改的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//9.按學號刪除學生信息
int student_delete_num(int n)
{
int nums;
int result;
printf("請輸入待刪除的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
//10.按姓名刪除學生信息
int student_delete_name(int n)
{
char name[50];
int result;
printf("請輸入待刪除的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
『捌』 學生信息管理系統c語言程序
我給你做的是20個人的,至於科目數,你加一下就夠了
#include<stdio.h>
#include<string.h>
#define
N
20//定義學生的個數
struct
student//學生的結構體
{
int
num;
char
name[8];
int
yuwen;
int
shuxue;
int
yingyu;
int
wuli;
}st[N];
void
main()
{
struct
student
t;
//用於後面做冒泡排序時的中間變數
printf("輸入%d名學生的相關信息:\n",N);
//N是你在前面用宏定義的
//你要輸入幾個學生的信息改變N值就可以了
printf("**************************************************\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(int
i=0;i<N;i++)
scanf("%d%s%d%d%d%d",&st[i].num,st[i].name,&st[i].yuwen,&st[i].shuxue,&st[i].yingyu,&st[i].wuli);
printf("**************************************************\n");
printf("學號
姓名
平均分\n");
double
avr[N];
for(i=0;i<N;i++)
{
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("%d\t\t%s\t%.2lf",st[i].num,st[i].name,avr[i]);
//注意這里的.2lf是說保留兩位小數的格式描述符.2的意思是幾位小數位
printf("\n");
}
printf("輸入你要查詢學生的序號,是第幾個學生\n");
scanf("%d",&i);
printf("學號
姓名
語文
數學
英語
物理\n");
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i-1].num,st[i-1].name,st[i-1].yuwen,st[i-1].shuxue,st[i-1].yingyu,st[i-1].wuli);
//這是用來選擇你要排序的種類的,注意是中文的輸入
printf("按照語文成績進行排序:\n");
printf("**************************************************\n");
//下面是冒泡排序
//例如按照語文成績排序
for(i=0;i<N-1;i++)
for(int
j=0;j<N-i-1;j++)
if(st[j].yuwen<=st[j+1].yuwen)
{
t=st[j];
st[j]=st[j+1];
st[j+1]=t;
}
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
//不及格的人
printf("**************************************************\n");
//這里必須要在算品均成績,應為交換之後,順序變了
for(i=0;i<N;i++)
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("不及格人名單如下:\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
if(avr[i]<60.0)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
}
『玖』 用C語言編寫學生信息管理系統,十萬火急!
可以參考
#include "stdio.h" /*I/O函數*/
#include "stdlib.h" /*其它說明*/
#include "string.h" /*字元串函數*/
#include "conio.h" /*屏幕操作函數*/
#include "mem.h" /*內存操作函數*/
#include "ctype.h" /*字元操作函數*/
#include "alloc.h" /*動態地址分配函數*/
struct score
{
int mingci;
char xuehao[8];
char mingzi[20];
float score[6];
}data,info[1000];
int i,j,k=0;
char temp[20],ch;
FILE *fp,*fp1;
void shuru()
{
if((fp=fopen("s_score.txt","ab+"))==NULL)
{
printf("cannot open this file.\n");
getch();exit(0);
}
for(i=0;i<=1000;i++)
{
printf("\nPlease shuru xuehao:");
gets(data.xuehao);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please shuru wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please shur huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
fwrite(&data,sizeof(data),1,fp);
printf("another?y/n");
ch=getch();
if(ch=='n'||ch=='N')
break;
} fclose(fp);
}
void xianshi()
{
float s;int n;
if((fp=fopen("s_score.txt","rb+"))==NULL)
{
printf("Cannot reading this file.\n");
exit(0);
}
for(i=0;i<=1000;i++)
{
if((fread(&info[i],sizeof(info[i]),1,fp))!=1)
break;
}
printf("\nxuehao mingzi yuwen shuxue yingyu wuli huauxue zhongfen\n");
for(j=0,k=1;j<i;j++,k++)
{
info[j].mingci=k;
printf("%6s %8s %3.1f %3.1f %3.1f %3.1f %3.1f %3.1f\n",info[j].xuehao,info[j].mingzi,info[j].score[0],info[j].score[1],info[j].score[2],info[j].score[3],info[j].score[4],
info[j].score[5]);
}
getch();
fclose(fp);
}
void xiugai()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("Cannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xiugai xuehao:");
scanf("%d",&i); getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("xuehao:%s\nmingzi:%s\n",data.xuehao,data.mingzi);
printf("Please shuru mingzi:");
gets(data.mingzi);
printf("Please shuru yuwen score:");
gets(temp);data.score[0]=atof(temp);
printf("Please shuru shuxue score:");
gets(temp);data.score[1]=atof(temp);
printf("Please input yingyu score:");
gets(temp);data.score[2]=atof(temp);
printf("Please input wuli score:");
gets(temp);data.score[3]=atof(temp);
printf("Please input huaxue score:");
gets(temp);data.score[4]=atof(temp);
data.score[5]=data.score[0]+data.score[1]+data.score[2]+data.score[3]+data.score[4];
} fwrite(&data,sizeof(data),1,fp1);
}
fseek(fp,0L,0);
fseek(fp1,0L,0);
while((fread(&data,sizeof(data),1,fp1))==1)
{
fwrite(&data,sizeof(data),1,fp);
}
fclose(fp);
fclose(fp1);
}
void chazhao()
{
if((fp=fopen("s_score.txt","rb"))==NULL)
{
printf("\nCannot open this file.\n");
exit(0);
}
printf("\nPLease shuru xuehao chakan:");
scanf("%d",&i);
while(fread(&data,sizeof(data),1,fp)==1)
{
j=atoi(data.xuehao);
if(i==j)
{
printf("xuehao:%s mingzi:%s\nyuwen:%f\n shuxue:%f\n yingyu:%f\n wuli:%f\n huaxue:%f\n ",data.xuehao,data.mingzi,data.score[0],data.score[1],data.score[2],data.score[3],data.score[4],data.score[5]);
}getch();
}
}
void shanchu()
{
if((fp=fopen("s_score.txt","rb+"))==NULL||(fp1=fopen("temp.txt","wb+"))==NULL)
{
printf("\nopen score.txt was failed!");
getch();
exit(0);
}
printf("\nPlease input ID which you want to del:");
scanf("%d",&i);getchar();
while((fread(&data,sizeof(data),1,fp))==1)
{
j=atoi(data.xuehao);
if(j==i)
{
printf("Anykey will delet it.\n");
getch();
continue;
}
fwrite(&data,sizeof(data),1,fp1);
}
fclose(fp);
fclose(fp1);
remove("s_score.txt");
rename("temp.txt","s_score.txt");
printf("Data delet was succesful!\n");
printf("Anykey will return to main.");
getch();
}
main()
{
while(1)
{
clrscr(); /*清屏幕*/
gotoxy(1,1); /*移動游標*/
textcolor(YELLOW); /*設置文本顯示顏色為黃色*/
textbackground(BLUE); /*設置背景顏色為藍色*/
window(1,1,99,99); /* 製作顯示菜單的窗口,大小根據菜單條數設計*/
clrscr();
printf("*************welcome to use student manage******************\n");
printf("*************************menu********************************\n");
printf("* ========================================================= * \n");
printf("* 1>shuru 2>xiugai * \n");
printf("* 3>shanchu 4>chazhao * \n");
printf("* 5>xianshi 6>exit * \n");
printf("* * \n");
printf("* --------------------------------------------------------- * \n");
printf(" Please input which you want(1-6):");
ch=getch();
switch(ch)
{
case '1':shuru();break;
case '2':xiugai(); break;
case '3':shanchu(); break;
case '4':chazhao(); break;
case '5':xianshi(); break;
case '6':exit(0);
default: continue;
}
}
}
『拾』 學生信息管理系統C語言編程
#include<stdio.h> /*I/O函數*/
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字元串函數*/
#define BUFLEN 100 /* 緩沖區最大字元數 */
#define LEN 15 /* 學號和姓名最大字元數,實際請更改 */
#define N 100 /* 最大學生人數,實際請更改*/
struct record /*結構體*/
{
char code[LEN+1]; /* 學號 */
char name[LEN+1]; /* 姓名 */
int age; /* 年齡 */
char sex[3]; /* 性別 */
char time[LEN+1]; /* 出生年月 */
char add[30]; /* 家庭地址 */
char tel[LEN+1]; /* 電話號碼 */
char mail[30]; /* 電子郵件地址 */
}stu[N];
int k=1,n,m; /* 定義全局變數 */
void readfile();/* 函數聲明 */
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
int main()
{
while(k)
menu();
system("pause");
return 0;
}
void help()
{
printf("\n0.歡迎使用系統幫助!\n");
printf("\n1.進入系統後,先刷新學生信息,再查詢;\n");
printf("\n2.按照菜單提示鍵入數字代號;\n");
printf("\n3.增加學生信息後,切記保存按7;\n");
printf("\n4.謝謝您的使用!\n");
}
void readfile()/* 建立信息 */
{
char *p="student.txt";
FILE *fp;
int i=0;
if ((fp=fopen("student.txt","r"))==NULL)
{
printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf("錄入完畢!\n");
}
void seek() /*查找*/
{
int i,item,flag;
char s1[21]; /* 以姓名和學號最長長度+1為准 */
printf("------------------\n");
printf("-----1.按學號查詢-----\n");
printf("-----2.按姓名查詢-----\n");
printf("-----3.退出本菜單-----\n");
printf("------------------\n");
while(1)
{
printf("請選擇子菜單編號:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("請輸入要查詢的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("該學號不存在!\n"); break;
case 2:
printf("請輸入要查詢的學生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("該姓名不存在!\n"); break;
case 3:return;
default:printf("請在1-3之間選擇\n");
}
}
}
void modify() /*修改信息*/
{
int i,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和學號最長長度+1為准 */
printf("請輸入要要修改的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*比較字元串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年齡\n");
printf("3.修改性別\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改電話號碼\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜單\n");
printf("------------------\n");
while(1)
{
printf("請選擇子菜單編號:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("請輸入新的姓名:\n");
scanf("%s",s2);
strcpy(stu[num].name,s2); break;
case 2:
printf("請輸入新的年齡:\n");
scanf("%d",&stu[num].age);break;
case 3:
printf("請輸入新的性別:\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1); break;
case 4:
printf("請輸入新的出生年月:\n");
scanf("%s",s2);
strcpy(stu[num].time,s2); break;
case 5:
printf("請輸入新的地址:\n");
scanf("%s",s2);
strcpy(stu[num].add,s2); break;
case 6:
printf("請輸入新的電話號碼:\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2); break;
case 7:
printf("請輸入新的E-mail地址:\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2); break;
case 8:return;
default:printf("請在1-8之間選擇\n");
}
}
}
void sort()/*按學號排序*/
{
int i,j,*p,*q,s;
char temp[10];
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
{
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu[j].tel,temp);
strcpy(temp,stu[j-1].mail);
strcpy(stu[j-1].mail,stu[j].mail);
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
void insert() /*插入函數*/
{
int i=n,j,flag;
printf("請輸入待增加的學生數:\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("請輸入第 %d 個學生的學號:\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j<i;j++)
if(strcmp(stu[i].code,stu[j].code)==0)
{
printf("已有該學號,請檢查後重新錄入!\n");
flag=1;
break; /*如有重復立即退出該層循環,提高判斷速度*/
}
}
printf("請輸入第 %d 個學生的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("請輸入第 %d 個學生的年齡:\n",i+1);
scanf("%d",&stu[i].age);
printf("請輸入第 %d 個學生的性別:\n",i+1);
scanf("%s",stu[i].sex);
printf("請輸入第 %d 個學生的出生年月:(格式:年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("請輸入第 %d 個學生的地址:\n",i+1);
scanf("%s",stu[i].add);
printf("請輸入第 %d 個學生的電話:\n",i+1);
scanf("%s",stu[i].tel);
printf("請輸入第 %d 個學生的E-mail:\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
{
i=i;
i++;
}
}
while(i<n+m);
n+=m;
printf("錄入完畢!\n\n");
sort();
}
void del()
{
int i,j,flag=0;
char s1[LEN+1];
printf("請輸入要刪除學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("該學號不存在!\n");
if(flag==1)
{
printf("刪除成功,顯示結果請選擇菜單6\n");
n--;
}
}
void display()
{
int i;
printf("所有學生的信息為:\n");
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%6s %7s %5d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
}
void save()
{
int i;
FILE *fp;
fp=fopen("student.txt","w"); /*寫入*/
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
fclose(fp);
}
void menu()/* 界面 */
{
int num;
printf("*********************系統功能菜單************************ \n");
printf("友情提醒:查詢前請先刷新系統! \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系統幫助及說明 * * 1.刷新學生信息 * \n");
printf(" ********************************************* \n");
printf(" * 2.查詢學生信息 * * 3.修改學生信息 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加學生信息 * * 5.按學號刪除信息 * \n");
printf(" ********************************************* \n");
printf(" * 6.顯示當前信息 * * 7.保存當前學生信息* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系統 * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("請選擇菜單編號:");
scanf("%d",&num);
switch(num)
{
case 0:help();break;
case 1:readfile();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:k=0;break;
default:printf("請在0-8之間選擇\n");
}