本文目錄一覽:
用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語言程序 如何編寫管理系統
C語言編程的規則
C語言源程序的編程語法歸納如下:
1,強制性規則
1,一個C語言源程序必須有且只有一個MAIN函數.
2,函數名後必須緊跟圓括號對,函數體放在右圓括號”)”後的花括號對”{}”中.
3,每個程序體(包括函數的函數體,含有多條語句的選擇結構和循環結構中的語句序列)必須用一對花括號括起來.
4,文件包含預處理命令,#INCLUDE*.H應置於源程序的開始位置.
5,語句未尾必須有分號,而預處理命令和函數首部的未尾及右花括號之後不要分號.
6,同一字母大,小寫意義不同,關鍵字和標準庫函數名必須用小寫.
7,變量必須先定義,後使用
8,除已有明顯間隔符外,標識符,關鍵字之間必須有至少一個空格9,註解必須包含在”/* */符號之間
用C語言編寫一個通訊錄管理系統
C語言編寫一個通訊錄管理系統的源代碼如下:
#includestdio.h
#includestring.h
#includestdlib.h
/*定義保存通迅錄的信息*/
structfriends
{
charname[20];/*名字*/
charprovince[20];/*省份*/
charcity[20];/*所在城市*/
charnation[20];/*民族*/
charsex[2];/*性別M/F*/
intage;/*年齡*/
}
擴展資料
1、在C++中應該使用inline內連函數替代宏調用,這樣既可達到宏調用的目的,又避免了宏調用的弊端。
2、在C語言兩個函數的名稱不能相同,否則會導致編譯錯誤。在C++中,函數名相同而參數不同的兩個函數被解釋為重載。
3、在大型程序中,使函數名易於管理和使用,不必絞盡腦汁地去處理函數名。
怎樣用c語言編寫學生管理系統?
1、一定要先寫好主函數的框架,然後再往上面加東西,這樣說有點籠統,我把我的主函數在下面,可以借鑒下哈。我的主函數是一個while(1)的無限循環,裏面一個switch選擇,利用一個菜單函數,讓其返回值當成switch選擇的值,然後進入不同的功能主函數,其他功能主函數和主函數的套路一樣。
2、輸入模塊一定要注意輸入的格式,我採用的尾插法,每次處理好一個節點後就讓用戶判定是否繼續輸入,在格式控制方面,我當用戶輸入一次,就判定它是否符號規範,如果不規範,就重新輸入。最後存入文件中。
3、一定要把函數寫的利用率高一點,這樣就可以減少代碼的重複書寫,這個全憑自己的寫代碼的風格了,我自己在這點也沒有做太好,反省中,以前剛開始學c的時候有人說c語言的主體是函數,不太懂,等寫完這個,感覺說的真的很對,c語言的函數寫好後,在該用的時候直接引用,很方便。
完整代碼:
原創文章,作者:FWYD,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/144680.html