c語言學生管理系統for結構,c語言寫學生管理系統

本文目錄一覽:

用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

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 17:13
下一篇 2024-12-12 17:13

相關推薦

  • 銀行資金管理系統總結

    銀行資金管理系統是銀行日常業務運營的核心支撐系統,主要負責處理銀行的資金流動、結算、清算等業務。本文將從功能特點、技術架構、安全性以及未來發展趨勢等多個方面對銀行資金管理系統進行詳…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python被稱為膠水語言

    Python作為一種跨平台的解釋性高級語言,最大的特點是被稱為”膠水語言”。 一、簡單易學 Python的語法簡單易學,更加人性化,這使得它成為了初學者的入…

    編程 2025-04-29
  • 北化教務管理系統介紹及開發代碼示例

    本文將從多個方面對北化教務管理系統進行介紹及開發代碼示例,幫助開發者更好地理解和應用該系統。 一、項目介紹 北化教務管理系統是一款針對高校學生和教職工的綜合信息管理系統。系統實現的…

    編程 2025-04-29
  • OpenJudge答案1.6的C語言實現

    本文將從多個方面詳細闡述OpenJudge答案1.6在C語言中的實現方法,幫助初學者更好地學習和理解。 一、需求概述 OpenJudge答案1.6的要求是,輸入兩個整數a和b,輸出…

    編程 2025-04-29
  • Vue TS工程結構用法介紹

    在本篇文章中,我們將從多個方面對Vue TS工程結構進行詳細的闡述,涵蓋文件結構、路由配置、組件間通訊、狀態管理等內容,並給出對應的代碼示例。 一、文件結構 一個好的文件結構可以極…

    編程 2025-04-29
  • Python按位運算符和C語言

    本文將從多個方面詳細闡述Python按位運算符和C語言的相關內容,並給出相應的代碼示例。 一、概述 Python是一種動態的、面向對象的編程語言,其按位運算符是用於按位操作的運算符…

    編程 2025-04-29
  • Python程序的三種基本控制結構

    控制結構是編程語言中非常重要的一部分,它們指導著程序如何在不同的情況下執行相應的指令。Python作為一種高級編程語言,也擁有三種基本的控制結構:順序結構、選擇結構和循環結構。 一…

    編程 2025-04-29
  • 數據結構學生成績管理系統

    在現代教育中,學生成績的管理已經成為了一個不可或缺的部分。藉助數據結構,一個高效、可靠的學生成績管理系統可以被輕鬆實現。 一、數據結構的選擇 在構建學生成績管理系統時,選擇合適的數…

    編程 2025-04-29

發表回復

登錄後才能評論