本文目錄一覽:
用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(“*************************************\n”);
printf(“歡迎使用學生成績管理系統\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(“[9] 按學號刪除某個學生信息\n”);
printf(“[10] 按姓名刪除某個學生信息\n”);
printf(“[0] 退出程序\n”);
printf(“請輸入您的選擇(0 – 9):”);
scanf(“%d”,choice);
printf(“**************************************)\n”);
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(“退出程序\n”);
printf(“程序結束,謝謝使用!\n”);
exit(0);
default:
printf(“您輸入的菜單有誤。請重新輸入!\n”);
}
}
return 0;
}
//1.輸入信息
void student_scanf(int n)
{
for (i = 0; in; ++i)
{
printf(“\n請輸入第%d個學生的信息:\n”, i + 1);
printf(“\n學號:”);
scanf(“%d”, num[i]);
printf(“\n姓名:”);
scanf(“%s”, names[i]);
printf(“\n數學成績:”);
scanf(“%d”, math[i]);
printf(“\n英語成績:”);
scanf(“%d”, english[i]);
printf(“\n計算機成績:”);
scanf(“%d”, computer[i]);
//計算總成績
sum[i] = math[i] + english[i] + computer[i];
}
}
//2.列印信息
void student_printf(int n)
{
printf(“\n學號\t姓名\t數學成績\t英語成績\t計算機成績\t總成績\n”);
printf(“———————————————————-\n”);
for (i = 0; in; ++i)
{
printf(“%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n”, num[i], names[i], math[i], english[i], computer[i], sum[i]);
}
printf(“——————————————————-\n”);
}
//3.按學號查找
int student_find_num(int n)
{
int nums;
int result;
printf(“請輸入待查找的學生學號:”);
scanf(“%d”,nums);
result= -1;
for (i = 0; in; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf(“沒有該學生信息!\n”);
return 0;
}
else
{
//先列印表頭
printf(“\n學號\t\t姓名\t\t數學成績\t英語成績\t計算機成績\t總成績\n”);
//再列印數據
printf(“%d\t\t%s\t\t%d\t\t%d\t\t%d\t%d\n”, num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf(“列印出查找結果!\n”);
}
return 1;
}
//4.用姓名查找成績
int student_find_name(int n)
{
char name[200];
int result;
printf(“請輸入待查找的學生姓名:”);
scanf(“%s”, name);
result = -1;
for (i = 0; in; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到結果
printf(“沒有該學生信息!\n”);
return 0;
}
else//找到結果
{
printf(“\n學號\t姓名\t數學成績\t英語成績\t計算機成績\t總成績\n”);
printf(“%d\t%s\t%d\t\t%d\t\t%d\t\t%d\n”, num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf(“已完成查找!\n”);
}
return 1;
}
//5.按學號排序
void student_sort_num(int n)
{
int min,max;
for(i=0; in; ++i) //複製臨時數組
{
temp_num[i] = num[i];
}
max = 0; //查找學號最大值,將其下標存至sort數組的最後一個值中
for(j=1; jn; j++)
{
if(temp_num[max]temp_num[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; in-1; ++i)
{
min = i; //查找學號最小值
for(j=0; jn; ++j)
{
if(temp_num[min]temp_num[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_num[min] = temp_num[max]; //利用臨時數組將查找過的學生信息的學號設為最大值,排除查找干擾
}
for(i=0; in; ++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; in; 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查看排序結果!\n”);
return ;
}
//6.按總成績排序
void student_sort_sum(int n)
{
int min,max;
for(i=0; in; ++i) //複製臨時數組
{
temp_sum[i] = sum[i];
}
max = 0; //查找總成績最大值,將其下標存至sort數組的最後一個值中
for(j=1; jn; j++)
{
if(temp_sum[max]temp_sum[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; in-1; ++i)
{
min = i; //查找總成績最小值
for(j=0; jn; ++j)
{
if(temp_sum[min]temp_sum[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用臨時數組將查找過的學生信息的總成績設為最大值,排除查找干擾
}
for(i=0; in; ++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; in; 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查看排序結果!\n”);
return ;
}
//7.按學號修改學生信息
int student_alter_num(int n)
{
int nums;
int result;
printf(“請輸入待修改的學生學號:”);
scanf(“%d”,nums);
result= -1;
for (i = 0; in; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf(“沒有該學生信息!\n”);
return 0;
}
else //修改信息值
{
printf(“請重新輸入該學生信息:\n”);
printf(“學號:\n”);
scanf(“%d”,num[result]);
printf(“姓名:\n”);
scanf(“%s”,names[result]);
printf(“數學成績:\n”);
scanf(“%d”,math[result]);
printf(“英語成績:\n”);
scanf(“%d”,english[result]);
printf(“計算機成績:\n”);
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; in; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf(“沒有該學生信息!\n”);
return 0;
}
else //修改信息值
{
printf(“請重新輸入該學生信息:\n”);
printf(“學號:\n”);
scanf(“%d”,num[result]);
printf(“姓名:\n”);
scanf(“%s”,names[result]);
printf(“數學成績:\n”);
scanf(“%d”,math[result]);
printf(“英語成績:\n”);
scanf(“%d”,english[result]);
printf(“計算機成績:\n”);
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; in; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf(“沒有該學生信息!\n”);
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; in-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; in; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf(“沒有該學生信息!\n”);
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; in-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語言學生管理系統
#includestdio.h
#includestring.h
#includestdlib.h
#includeconio.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;i12-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;icount;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptrptr-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(icheck3)
{
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
#include stdlib.h
#include string.h
struct node
{
int code;
char name[20];
char type;
int age;
int chinese;
int math;
int total;
}stud[100];
struct node temp;
void menu();
int input();
void find(int);
void insert(int);
void deletel(int);
void print(int);
void sort(int);
void main()
{
int n,c=0,d=0;
while(1)
{
menu();
scanf(“%d”,n);
switch(n)
{
case 1:system(“cls”);d=input();c+=d;break;
case 2:system(“cls”);find(c);break;
case 3:system(“cls”);insert(c);++c;break;
case 4:system(“cls”);deletel(c);–c;break;
case 5:system(“cls”);print(c);break;
case 6:system(“cls”);sort(c);break;
case 7:exit(0);break;
default:
printf(“輸入錯誤,請輸入(1-7):\n”);
printf(“按回車鍵繼續…\n”);
getchar();
}
}
}
void menu()
{
system(“cls”);
printf(“\t\t學生信息管理系統\n”);
printf(“\t\t***************\n”);
printf(“\t\t** 歡迎使用 **\n”);
printf(“\t\t*[1]輸入數據*\n”);
printf(“\t\t*[2]查找數據*\n”);
printf(“\t\t*[3]插入數據*\n”);
printf(“\t\t*[4]刪除數據*\n”);
printf(“\t\t*[5]列印數據*\n”);
printf(“\t\t*[6]排序數據*\n”);
printf(“\t\t*[7]退出*\n”);
printf(“\t\t** 歡迎使用 **\n”);
printf(“\t\t***************\n”);
printf(“\t\t請輸入你的選項(1-7):”);
}
int input()
{
int i,n;
printf(“請輸入要插入幾位學生信息:\n”);
scanf(“%d”,n);
for(i=0;in;i++)
{
printf(“請輸入第%d個學生學號:”,i+1);
scanf(“%d”,stud[i].code);
printf(“第%d個學生姓名:”,i+1);
scanf(“%s”,stud[i].name);
getchar();
printf(“第%d個學生性別F/M:”,i+1);
scanf(“%c”,stud[i].type);
printf(“第%d個學生年齡:”,i+1);
scanf(“%d”,stud[i].age);
printf(“第%d個學生語文成績:”,i+1);
scanf(“%d”,stud[i].chinese);
printf(“第%d個學生數學成績:”,i+1);
scanf(“%d”,stud[i].math);
stud[i].total=stud[i].chinese+stud[i].math;
}
return n;
}
void find(int c)
{
int n,m,i,j,l;
char k[20];
system(“cls”);
printf(“輸入1學號查找\n輸入2按姓名查找\n”);
printf(“請選擇:”);
scanf(“%d”,n);
if(n==1)
{
printf(“請輸入學生學號:”);
scanf(“%d”,m);
for(i=0;ic;i++)
{
if(stud[i].code==m)
{
printf(“**********************\n”);
printf(“學號:%d\n”,stud[i].code);
printf(“姓名:%s\n”,stud[i].name);
printf(“性別:%c\n”,stud[i].type);
printf(“年齡:%d\n”,stud[i].age);
printf(“語文成績:%d\n”,stud[i].chinese);
printf(“數學成績:%d\n”,stud[i].math);
printf(“總分:%d\n”,stud[i].total);
printf(“**********************\n”);
printf(“回車鍵返回\n”);
getchar();
getchar();
}
}
}
else
if(n==2)
{
getchar();
printf(“請輸入姓名:”);
fgets(k,20,stdin);
l=strlen(k);
k[l-1]=’\0′;
for(j=0;jc;j++)
{
if(strcmp(k,stud[j].name)==0)
{
printf(“**********************\n”);
printf(“學號:%d\n”,stud[j].code);
printf(“姓名:%s\n”,stud[j].name);
printf(“性別:%c\n”,stud[j].type);
printf(“年齡:%d\n”,stud[j].age);
printf(“語文成績:%d\n”,stud[j].chinese);
printf(“數學成績:%d\n”,stud[j].math);
printf(“總分:%d\n”,stud[j].total);
printf(“**********************\n”);
printf(“回車鍵返回\n”);
getchar();
getchar();
}
}
}
else
{
getchar();
getchar();
}
}
void insert(int c)
{
int i,j;
system(“cls”);
printf(“請輸入要插入學生的信息:\n”);
printf(“請輸入學號:”);
scanf(“%d”,temp.code);
printf(“請輸入姓名:”);
scanf(“%s”,temp.name);
getchar();
printf(“請輸入性別F/M:”);
scanf(“%c”,temp.type);
printf(“請輸入年齡:”);
scanf(“%d”,temp.age);
printf(“請輸入語文成績:”);
scanf(“%d”,temp.chinese);
printf(“請輸入數學成績:”);
scanf(“%d”,temp.math);
temp.total=temp.chinese+temp.math;
for(i=0;ic;i++)
{
if(temp.codestud[i].code)
{
for(j=c;ji;j–)
{
stud[j].code=stud[j-1].code;
strcpy(stud[j].name,stud[j-1].name);
stud[j].type=stud[j-1].type;
stud[j].age=stud[j-1].age;
stud[j].chinese=stud[j-1].chinese;
stud[j].math=stud[j-1].math;
stud[j].total=stud[j-1].total;
}
stud[j].code=temp.code;
strcpy(stud[j].name,temp.name);
stud[j].type=temp.type;
stud[j].age=temp.age;
stud[j].chinese=temp.chinese;
stud[j].math=temp.math;
stud[j].total=temp.total;
break;
}
}
if(i=c)
{
stud[i].code=temp.code;
strcpy(stud[i].name,temp.name);
stud[i].type=temp.type;
stud[i].age=temp.age;
stud[i].chinese=temp.chinese;
stud[i].math=temp.math;
stud[i].total=temp.total;
}
}
void deletel(int c)
{
int i,j,n;
printf(“請輸入要刪除的學號:\n”);
scanf(“%d”,n);
for(i=0;ic;i++)
{
if(stud[i].code==n)
{
c=c-1;
for(j=i;jc;j++)
{
stud[j].code=stud[j+1].code;
strcpy(stud[j].name,stud[j+1].name);
stud[j].type=stud[j+1].type;
stud[j].age=stud[j+1].age;
stud[j].chinese=stud[j+1].chinese;
stud[j].math=stud[j+1].math;
stud[j].total=stud[j+1].total;
}
}
}
getchar();
printf(“按回車鍵繼續…\n”);
getchar();
}
void print(int c)
{
int i;
system(“cls”);
for(i=0;ic;i++)
{
printf(“********************\n”);
printf(“學號:%d\n”,stud[i].code);
printf(“姓名:%s\n”,stud[i].name);
printf(“性別:%c\n”,stud[i].type);
printf(“年齡:%d\n”,stud[i].age);
printf(“語文成績:%d\n”,stud[i].chinese);
printf(“數學成績:%d\n”,stud[i].math);
printf(“總分:%d\n”,stud[i].total);
printf(“**********************\n”);
}
printf(“按回車鍵繼續…\n”);
getchar();
getchar();
}
void sort(int c)
{
int i,j,n;
printf(“學號排序\n”);
for(i=c-1;i0;i–)
for(j=0;ji;j++)
if(stud[j].codestud[j+1].code)
{
temp.code=stud[j].code;
strcpy(temp.name,stud[j].name);
temp.type=stud[j].type;
temp.age=stud[j].age;
temp.chinese=stud[j].chinese;
temp.math=stud[j].math;
temp.total=stud[j].total;
stud[j].code=stud[j+1].code;
strcpy(stud[j].name,stud[j+1].name);
stud[j].type=stud[j+1].type;
stud[j].age=stud[j+1].age;
stud[j].chinese=stud[j+1].chinese;
stud[j].math=stud[j+1].math;
stud[j].total=stud[j+1].total;
stud[j+1].code=temp.code;
strcpy(stud[j+1].name,temp.name);
stud[j+1].type=temp.type;
stud[j+1].age=temp.age;
stud[j+1].chinese=temp.chinese;
stud[j+1].math=temp.math;
stud[j+1].total=temp.total;
}
getchar();
getchar();
}
c語言學生管理系統
#include stdio.h
#include string.h
#include stdlib.h
#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;
}
C語言 學生管理系統
#include
#include
#include
#include
#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;i12-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;icount;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptrptr-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(icheck3)
{
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;
}
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/249433.html