學生成績管理系統c語言
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define N 50//定義的學生數組的個數
#define M 1//定義的管理員數組的個數
int k;//錄入學生的個數
char read_door[20];//讀取文件的"門"
void Add_data(int flag);//增加數據
void Count_score(int flag);//求平均成績和總成績
void Delete_data(int flag);//根據學號刪除對應學生的成績
int Landing(int key);//登錄程序
void Load_data();//載入數據
void Updata_stu(int flag);
void Read_bigdoor(char *b);
void Rank_score(int way, int flag);//按照需求對對應的成績排序
void Read_data(char read_door);//讀取數據
void Read_door();//讀取"門"值
void Read_main_flag(int *a);
void Read_k();
void Save_bigdoor(char *b);
void Save_data(int flag);//保存數據
void Save_door();//保存"門"值
void Save_main_flag(int *a);
void Save_k(int k);
void Screen_rank();
void Screen_search();
void Screen_stu();
void Screen_teacher();
void Screen_stu_teach();
void Screen_onlyteach();
void Search_data(int way, int flag);//按學號或姓名查找查找
static struct STUDENT//學生的信息
{
char num[10];
char name[10];
float score[3];
float sum;
float aver;
int rank[4];
}stu[N];
static struct TEACHER//教師的登錄賬號和密碼
{
char num[10];
char code[10];
}teach[M] = { "18061124","991228" };
int main()
{
char bigdoor ='n';//教師可通過bigdoor控制學生的許可權
char *c=&bigdoor;
int order1, order2, order3;//order為用戶登錄的指令
int door1, door2, door3;
printf ("請輸入管理員登錄指令:\n");
gets(read_door);
if (strcmp(read_door,"Lu Chen")==0)
{
printf("歡迎使用,您目前是擁有最高許可權的管理員,請輸入您的賬號和密碼:\n\n");
printf("\n\n\n");
Screen_onlyteach();
door1 = Landing(1);
if (door1 == 2)
{
printf("\n賬號或密碼不正確");
return 0;
}
}
else
{
Screen_stu_teach();
printf("請輸入序號即選擇登錄選項:");
scanf("%d", &order1);
printf("\n\n");
door1 = Landing(order1);//door1確定用戶的許可權
switch (door1)//提示用戶輸入出錯
{
case 1:
case 3: break;
case 2:printf("\n輸入的賬號或密碼有誤"); return 0;
case 4:printf("\n輸入的號碼有誤"); return 0;
}
}
if (door1 == 1)//老師界面
{
int flag = 0;
int *p=&flag;
char teach_read_key;
printf("\n是否讀取數據?(y/n):");
scanf("%*c%c",&teach_read_key);
if(teach_read_key=='y')
{
Read_k();
Read_door();
Read_main_flag(p);
Read_data(read_door[20]);
}
printf("\n\n");
for (int count = 1; count > 0; count++)//利用死循環來重復使用功能
{
Screen_teacher();
printf("\n請輸入序號即選擇登錄選項:");
scanf("%d", &order2);
printf("\n\n");
if (order2 == 10)
break;
switch (order2)
{
case 1:
{
Load_data();
flag=1;
Save_main_flag(p);
Save_k(k);
}break;
case 2:Updata_stu(flag); break;
case 3:
{
Screen_search();
printf("請輸入你想查詢成績的方式:");
scanf("%d", &door2);
Search_data(door2, flag);
}break;
case 4:Add_data(flag);break;
case 5:Delete_data(flag);break;
case 6:
{
Screen_rank();
printf("請輸入成績序號來選擇排序:");
scanf("%d", &door2);
Rank_score(door2, flag);
} break;
case 7:
{
Save_data(flag);
Save_door();
Save_k(k);
} break;
case 8:
{
bigdoor ='n';
Save_bigdoor(c);
}break;
case 9:
{
bigdoor ='y';
Save_bigdoor(c);
}break;
default:printf("您輸入的序號有誤!\n\n");
}
}
}
else//學生界面
{
Read_k();
Read_data('y');
for (int k = 1; k > 0; k++)
{
Screen_stu();
printf("請輸入下一步操作的序號:");
scanf("%d", &order3);
if (order3 == 3)
break;
switch (order3)
{
case 1:
{
Screen_search();
printf("請輸入你想查詢成績的方式");
scanf("%d", &door3);
Search_data(door3, 1);
}break;
case 2:
{
Screen_rank();
printf("請輸入成績序號來選擇排序:");
scanf("%d", &door3);
Rank_score(door3, 1);
}break;
default:printf("輸入的操作序號有誤\n\n");
}
}
}
return 0;
}
int Landing(int key)//登錄程序
{
char num[10];
char code[10];
if (key == 1)
{
printf("請輸入賬號:");
scanf("%s", num);
printf("\n請輸入密碼:");
scanf("%s", code);
for (int i = 0; i < M; i++)
if (strcmp(teach[i].num, num) == 0 && strcmp(teach[i].code, code) == 0)//判斷登陸賬號和密碼是否正確
return 1;
else
return 2;
}
else if (key == 2)
{
return 3;
}
else
{
return 4;
}
}
void Search_data(int way, int flag)//按學號或姓名查找查找
{
int Search_flag = 1;
if (flag)
{
char num[10], name[10];
int i;
if (way == 1)
{
printf("\n請輸入學號:");
scanf("%s", num);
for (i = 0; i < k; i++)
{
if (strcmp(stu[i].num, num) == 0)//判斷學號存不存在
{
printf("\n姓名:%s\n學號:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
Search_flag = 0;
break;
}
}
if (Search_flag)
printf("\n您輸入的學號有誤\n");
}
else if (way == 2)
{
printf("\n請輸入姓名:");
scanf("%s", name);
for (i = 0; i < N; i++)
{
if (strcmp(stu[i].name, name) == 0)//判斷姓名存不存在
{
printf("\n姓名:%s\n學號:%s\nsubject1:%f\nsubject2:%f\nsubject3:%f\nsum:%f\naver:%f\n", stu[i].name, stu[i].num, stu[i].score[0], stu[i].score[1], stu[i].score[2], stu[i].sum, stu[i].aver);
flag = 0;
break;
}
}
if (flag)
printf("\n輸入的姓名有誤\n");
}
else
printf("\n輸入的序號有誤\n");
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Count_score(int flag)//求平均成績和總成績
{
if (flag)
{
for (int i = 0; i < k; i++)
{
stu[i].sum = stu[i].score[0] + stu[i].score[1] + stu[i].score[2];
stu[i].aver = stu[i].sum / 3;
}
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Load_data()//載入數據
{
printf("輸入錄入學生成績個數:");
scanf("%d", &k);
for (int i = 0; i < k; i++)
{
scanf("%s%s%f%f%f", stu[i].num, stu[i].name, &stu[i].score[0], &stu[i].score[1], &stu[i].score[2]);
Count_score(1);
}
}
void Rank_score(int way, int flag)//按照需求對對應的成績排序
{
int i, j, n, temp;
if (flag)
{
for (i = 0; i < 4; i++)
for (j = 0; j < k; j++)
stu[j].rank[i] = j + 1;
if (way == 1)
{
for (i = 0; i < 3; i++)
for (j = 0; j < k; j++)
for (n = j + 1; n < k; n++)
if (stu[j].score[i] < stu[n].score[i])
{
temp = stu[j].rank[i];
stu[j].rank[i] = stu[n].rank[i];
stu[n].rank[i] = temp;
}
printf("\n");
for (i = 0; i < k; i++)
printf("姓名:%s 學號:%s subject1:%d subject2:%d subject3:%d\n", stu[i].name, stu[i].num, stu[i].rank[0], stu[i].rank[1], stu[i].rank[2]);
}
else if (way == 2)
{
for (j = 0; j < k; j++)
for (n = j + 1; n < k; n++)
if (stu[j].sum < stu[n].sum)
{
temp = stu[j].rank[3];
stu[j].rank[3] = stu[n].rank[3];
stu[n].rank[3] = temp;
}
printf("\n");
for (i = 0; i < k; i++)
printf("姓名:%s 學號:%s sum: %d\n", stu[i].name, stu[i].num, stu[i].rank[3]);
}
else
{
printf("\n輸入的序號有誤\n");
}
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Delete_data(int flag)//根據學號刪除對應學生的成績
{
if (flag)
{
int i, j;
char num[10];
printf("\n請輸入您想要刪除信息的學號:");
scanf("%s", num);
for (i = 0; i < k; i++)
{
if (strcmp(stu[i].num, num) == 0)
for (j = i + 1; j < k; j++)
{
stu[i] = stu[j];
Count_score(1);
}
}
k--;
Save_k(k);
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Updata_stu(int flag)//根據學號修改學生的成績
{
int Updata_flag = 1;
if (flag)
{
char num[10];
float subject1, subject2, subject3;
printf("\n請輸入您想要修改學生的學號:");
scanf("%s", num);
printf("\n請輸入您想要更改的學生三科的成績:");
scanf("%f%f%f", &subject1, &subject2, &subject3);
for (int i = 0; i < k; i++)
if (strcmp(stu[i].num, num) == 0)
{
stu[i].score[0] = subject1;
stu[i].score[1] = subject2;
stu[i].score[2] = subject3;
Updata_flag = 0;
Count_score(1);
}
if (Updata_flag)
{
printf("\n輸入學號有誤\n");
}
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Save_data(int flag)//保存數據
{
if(flag)
{
FILE *fp;
if((fp=fopen("load.txt","w"))==NULL)
{
printf("Save_data error!");
exit(0);
}
for(int i=0;i<k;i++)
{
fwrite(&stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
printf("成功保存數據!\n\n");
read_door[20]='y';
}
else
{
printf("\n您還沒有載入數據\n");
}
}
void Read_data(char read_door)//讀取數據
{
if(read_door=='y')
{
FILE *fp;
if((fp=fopen("load.txt","r"))==NULL)
{
printf("Read_data error!");
exit(0);
}
for(int i=0;i<k;i++)
{
fread(&stu[i],sizeof(STUDENT),1,fp);
}
fclose(fp);
}
else
{
printf("\n沒有保存數據的記錄\n");
}
}
void Save_door()//保存"門"值
{
FILE *fp;
if((fp=fopen("door.txt","w"))==NULL)
{
printf("Save_door error!");
exit(0);
}
fputc(read_door[20],fp);
fclose(fp);
}
void Read_door()//讀取"門"值
{
FILE *fp;
if((fp=fopen("door.txt","r"))==NULL)
{
printf("Read_door error!");
exit(0);
}
read_door[20]=fgetc(fp);
fclose(fp);
}
void Save_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","w"))==NULL)
{
printf("Save_main_flag error!");
exit(0);
}
fprintf(fp,"%d",*a);
fclose(fp);
}
void Read_main_flag(int *a)
{
FILE *fp;
if((fp=fopen("flag.txt","r"))==NULL)
{
printf("Read_main_flag error!");
exit(0);
}
fscanf(fp,"%d",a);
fclose(fp);
}
void Save_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","w"))==0)
{
printf("Save_bigdoor error!");
exit(0);
}
fputc(*b,fp);
fclose(fp);
}
void Read_bigdoor(char *b)
{
FILE *fp;
if((fp=fopen("bigdoor.txt","r"))==0)
{
printf("Read_bigdoor error!");
exit(0);
}
*b=fgetc(fp);
fclose(fp);
}
void Save_k(int k)
{
FILE *fp;
if((fp=fopen("k.txt","w"))==0)
{
printf("Save_k error!");
exit(0);
}
fprintf(fp,"%d",k);
fclose(fp);
}
void Read_k()
{
FILE *fp;
if((fp=fopen("k.txt","r"))==0)
{
printf("Read_k error!");
exit(0);
}
fscanf(fp,"%d",&k);
fclose(fp);
}
void Add_data(int flag)//增加數據
{
int i, j,count=k;
char num[10], name[10];
float subject1, subject2, subject3;
if (flag)
{
printf("\n輸入您想增加的數據條數:");
scanf("%d", &i);
for (j = 0; j < i; j++)
{
printf("\n輸入增加的學生學號,姓名,三門科目成績");
scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3);
strcpy(stu[count + j].num, num);
strcpy(stu[count+ j].name, name);
stu[count+ j].score[0] = subject1;
stu[count + j].score[1] = subject2;
stu[count+ j].score[2] = subject3;
k++;
Count_score(1);
}
Save_k(k);
}
else
{
printf("\n輸入您想增加的數據條數:");
scanf("%d", &i);
for (j = 0; j < i; j++)
{
printf("\n輸入增加的學生學號,姓名,三門科目成績");
scanf("%s%s%f%f%f", num, name, &subject1, &subject2, &subject3);
strcpy(stu[j].num, num);
strcpy(stu[j].name, name);
stu[j].score[0] = subject1;
stu[j].score[1] = subject2;
stu[j].score[2] = subject3;
k++;
Count_score(1);
}
}
}
void Screen_search()//查詢界面
{
printf("*****************學生成績查詢界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① 學生學號查詢 |\n");
printf("| ② 學生姓名查詢 |\n");
printf("——————————————————————————\n");
}
void Screen_rank()//成績排名方式界面
{
printf("*****************學生成績排名界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① subject |\n");
printf("| ② sum |\n");
printf("——————————————————————————\n");
}
void Screen_teacher()
{
printf("*****************教師管理操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① 數據載入 |\n");
printf("| ② 修改數據 |\n");
printf("| ③ 查詢數據 |\n");
printf("| ④ 添加數據 |\n");
printf("| ⑤ 刪除數據 |\n");
printf("| ⑥ 成績排序 |\n");
printf("| ⑦ 保存數據 |\n");
printf("| ⑧ 學生限制 |\n");
printf("| ⑨ 學生開放 |\n");
printf("| ⑩ 退出 |\n");
printf("——————————————————————————\n");
}
void Screen_stu_teach()
{
printf("*****************學生成績管理系統*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① 教師管理員登錄 |\n");
printf("| ② 學生端登錄 |\n");
printf("——————————————————————————\n");
}
void Screen_onlyteach()
{
printf("*****************教師登陸操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① 教師管理員登錄 |\n");
printf("——————————————————————————\n");
}
void Screen_stu()
{
printf("*****************學生用戶操作界面*******************\n\n\n");
printf("——————————————————————————\n");
printf("| ① 學生成績查詢 |\n");
printf("| ② 成績排名查詢 |\n");
printf("| ③ 退出 |\n");
printf("——————————————————————————\n");
}
以上內容僅是本人通過多方瀏覽網上資料,自己敲出來的。
如有問題,大家可以在評論區下方留言!!!
本人已親測,可用
『貳』 用C語言設計一個學生成績管理系統
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#defineMAX1000
/*定義學生成績信息結構*/
struct stu
{
char id[8];
char name[8];

(2)學生成績管理系統c語言擴展閱讀:
short:修飾int,短整型數據,可省略被修飾的int。(K&R時期引入)
long:修飾int,長整型數據,可省略被修飾的int。(K&R時期引入)
long long:修飾int,超長整型數據,可省略被修飾的int。(C99標准新增)
signed:修飾整型數據,有符號數據類型。(C89標准新增)
unsigned:修飾整型數據,無符號數據類型。(K&R時期引入)
restrict:用於限定和約束指針,並表明指針是訪問一個數據對象的唯一且初始的方式。(C99標准新增)
復雜類型關鍵字
struct:結構體聲明。(K&R時期引入)
union:聯合體聲明。(K&R時期引入)
enum:枚舉聲明。(C89標准新增)
typedef:聲明類型別名。(K&R時期引入)
sizeof:得到特定類型或特定類型變數的大小。(K&R時期引入)
inline:內聯函數用於取代宏定義,會在任何調用它的地方展開。(C99標准新增)
『叄』 C語言 學生成績管理系統
#include <stdio.h>
#define MAX 40
typedef struct{
char name[15];
int num;
int C;
int E;
int M;
int sum;
}student_t;
typedef struct{
int n;
student_t stu[MAX];
}class_t;
enum{
ADD_STUDENT = 1,
SHOW_STUDENT = 2,
DELETE_STUDENT = 3,
SORT_STUDENT = 4,
FIND_STUDENT = 5,
QUIT
};
void input_student(student_t *pstu)
{
int ret;
again_input:
printf("學號\t姓名\tC語言\t英語\t數學\t\n");
ret = scanf("%d %s %d %d %d",&pstu->num,pstu->name,&pstu->C,&pstu->E,&pstu->M);
if(ret < 5){
printf("Input error,must input string,int,int\n");
while ( getchar() != '\n')
;
goto again_input;
}
pstu->sum=(pstu->C+pstu->E+pstu->M);
printf("input end!\n");
return;
}
int add_student(class_t *pclass,student_t *pstu)
{
if(pclass->n >= MAX){
printf("The class is full!\n");
return -1;
}
pclass->stu[pclass->n ++] = *pstu;
return 0;
}
void show(student_t *pstu)
{
printf("%d %s %d %d %d %d\n",pstu->num,pstu->name,pstu->C,pstu->E,pstu->M,pstu->sum);
return;
}
void show_student(class_t *pclass)
{
int i;
printf("學號\t姓名\tC語言\t英語\t數學\t總分\t\n");
for(i = 0;i < pclass->n;i ++){
show(&pclass->stu[i]);
}
return;
}
int delete_student(class_t *pclass,char *stu_name)
{
int i,j;
for(i = 0, j = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) != 0){
pclass->stu[j++] = pclass->stu[i];
}
}
if(i == j){
printf("The delete student:%s is not exist!\n",stu_name);
return 0;
}else{
pclass->n = j;
return i - j;
}
}
void sort_student(class_t *pclass)
{
int i,j;
int flag;
student_t student;
for(i = 0;i < pclass->n - 1;i ++){
for(j = 0,flag = 0;j < pclass->n - 1 - i;j ++){
if(pclass->stu[j].sum > pclass->stu[j + 1].sum){
student = pclass->stu[j];
pclass->stu[j] = pclass->stu[j+1];
pclass->stu[j+1] = student;
flag = 1;
}
}
if(!flag){
break;
}
}
return;
}
int find_student(class_t *pclass,char *stu_name)
{
int i;
int count = 0;
for(i = 0;i < pclass->n;i ++){
if(strcmp(pclass->stu[i].name,stu_name) == 0){
show(&pclass->stu[i]);
count ++;
}
}
return count;
}
int main(int argc, const char *argv[])
{
int n;
int choice;
char name[15];
class_t class = {0};
student_t student;
while(1)
{
puts("------------------------------------------");
puts("1.添加 2.查詢 3.刪除 4.排序 5.查找 6.退出");
puts("------------------------------------------");
printf("choice > ");
scanf("%d",&choice);
switch(choice){
case ADD_STUDENT:
input_student(&student);
add_student(&class,&student);
break;
case SHOW_STUDENT:
show_student(&class);
break;
case DELETE_STUDENT:
printf("Input delete student name : ");
scanf("%s",name);
n = delete_student(&class,name);
if(n > 0){
printf("Delete %d students!\n",n);
}
break;
case SORT_STUDENT:
sort_student(&class);
show_student(&class);
break;
case FIND_STUDENT:
printf("Input find student name : ");
scanf("%s",name);
n = find_student(&class,name);
printf("Find %d students!\n",n);
break;
case QUIT:
printf("quit student system!\n");
goto quit;
}
}
quit:
return 0;
}
『肆』 怎樣用C語言寫學生成績管理系統
程序如下: #include
『伍』 用C語言編寫一個學生成績管理系統
// test4.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct Student //學生結構體
{
char name[20]; //名字
char sex[10]; //性別
char zuanye[20]; //專業
char code[13]; //學號
char department[20]; //學院
char degree[20]; //學歷
};
struct node
{
struct Student data;
struct node *next;
};
//---------------------------------------------------------------------------------
void print_menu(void) // 列印總菜單
{
printf(" |--------------------------------------------------|\n");
printf(" | 總 菜 單 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--增加一個學生信息 | 5--刪除一個學生信息 |\n");
printf(" | 2--顯示一個學生信息 | 6--統計功能 |\n");
printf(" | 3--顯示一個班級信息 | 7--結束 |\n");
printf(" | 4--修改一個學生信息 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
}
void print_menu4(void ) //列印修改功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 修 改 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1--修改名字 | 5--修改學院 |\n");
printf(" | 2--修改性別 | 6--修改專業 |\n");
printf(" | 3--修改學號 | 7--不作修改 |\n");
printf(" | 4--修改學歷 | \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 \3 |\n");
printf(" |--------------------------------------------------|\n");
printf("再次選擇選項 :");
}
void print_static_function_menu(void) //列印統計功能
{
printf(" |--------------------------------------------------|\n");
printf(" | 統 計 功 能 : |\n");
printf(" |--------------------------------------------------|\n");
printf(" | 1.男/女人數 | 3.一個專業人數 |\n");
printf(" | 2.一個班級人數 | 4.結束 |\n");
printf(" |--------------------------------------------------|\n");
printf("請選擇選項:\n");
}
int compareCode(char a[],char b[]) //比較 判斷是否是同一個班級
{
for(int i=0;i<9;i++)
if(a[i]!=b[i]) break;
if(i==9) return 1;
else return 0;
}
//-------------------------------------------------------------------------------------
void main() //主函數從這里開始
{
system("color 3");
printf("\n\n\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3 學 生 證 管 理 程 序 \3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3 作者: \3\3\3\3\3\3\3\n");
printf(" \3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\3\n");
int choice;
struct node *studentlist=(struct node*)malloc(sizeof(struct node)); //學生鏈表頭 //////////////////////////////////////////////////////////
studentlist->next=NULL;
struct node *temp=NULL;
struct node *p=(struct node*)malloc(sizeof(struct node));
char tempcode[13]; //臨時學號
char tempclass[11]; //臨時班級
char tempzuanye[20];//臨時專業
int count=0;
int choice6,count_male,count_female;
const int sizeStu=sizeof(struct Student);
struct Student data;
FILE *fp;
if((fp=fopen("d:\\學生證管理程序.dat","rb"))==NULL)
{
fp=fopen("d:\\學生證管理程序.dat","wb");
}
fclose(fp);
fp=fopen("d:\\學生證管理程序.dat","rb");
while(fread(&data,sizeStu,1,fp)==1)
{
p->data=data;
p->next=NULL;
if(studentlist==NULL)
studentlist=p;
else
{ temp=studentlist;
while(temp->next!=NULL){temp=temp->next;}
temp->next=p;
}
p=(struct node*)malloc(sizeof(struct node));
}
fclose(fp);
print_menu(); //列印菜單
scanf("%d",&choice); //讀進選項
while(choice!=7) //未遇到結束鍵
{
switch(choice)
{
//----------------------------------------------------------------
//選項1,增加學生學生證信息
case 1: //輸入一個學生信息
p=(node*) malloc(sizeof(node));
printf("\n請輸入姓名:");
scanf("%s",p->data.name);
printf("\n請輸入性別(男/女):");
scanf("%s",p->data.sex);
printf("\n請輸入學號(12位):");
scanf("%s",p->data.code);
printf("\n請輸入學制(本科生/研究生):");
scanf("%s",p->data.degree);
printf("\n請輸入學院:");
scanf("%s",p->data.department);
printf("\n請輸入專業:");
scanf("%s",p->data.zuanye);
p->next=NULL;
//----------------------------------------------------------鏈表連接
if(studentlist==NULL) { studentlist=p; studentlist->next=NULL;}
else {
temp=studentlist;
while(temp->next!=NULL) ////////////////////
{
temp=temp->next;
}
temp->next=p;
p->next=NULL;
}
break;
//---------------------------------------------------------------------
//選項2,顯示給定學生學生證信息
case 2: printf("\n請輸入學生學號(12位數):");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //尋找響應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n不能找到該學生信息.\n");
else {
printf("------------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性別: %s\n",temp->data.sex);
printf("學號: %s\n",temp->data.code);
printf("學歷: %s\n",temp->data.degree);
printf("學院: %s\n",temp->data.department);
printf("專業: %s\n",temp->data.zuanye);
printf("------------------------------------------------\n\n");
}
break;
//-----------------------------------------------------------------
//選項3,顯示給定班級的學生信息
case 3:printf("\n請輸入班級號 :"); //輸入班級號
scanf("%s",tempclass);
while(strlen(tempclass)<10) //班級號位數小於10時,重新輸入
{
printf("錯誤的班級號,請重新輸入:");
scanf("%s",tempclass);
}
count=0; //班級學生數
temp=studentlist;
while(temp!=NULL) //檢索鏈表,並列印相應學生的學生證信息
{
if(compareCode(tempclass,temp->data.code)) {//列印屬於這個班級的學生
printf("-----------------------------------------------\n");
printf("姓名: %s\n",temp->data.name);
printf("性別: %s\n",temp->data.sex);
printf("學號: %s\n",temp->data.code);
printf("學歷: %s\n",temp->data.degree);
printf("學院: %s\n",temp->data.department);
printf("專業: %s\n",temp->data.zuanye);
printf("-----------------------------------------------\n");
count++;
}
temp=temp->next;
}
if(count==0) printf("該班級還未有成員.\n");
break;
//-------------------------------------------------------------------
//選項4,修改給定學生的信息
case 4: printf("請輸入要作修改的學生證號:");
scanf("%s",tempcode);
temp=studentlist;
while(temp!=NULL) //尋找響應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到相應學生的信息.\n");//找不到相應的學生
else {
int choice2;
print_menu4();
scanf("%d",&choice2);
while(choice2!=7)
{
switch(choice2)
{
case 1:printf("修改名字:"); //修改名字
scanf("%s",temp->data.name);
break;
case 2:printf("修改性別:");//修改性別
scanf("%s",temp->data.sex);
break;
case 3:printf("修改學號:");//修改學號
scanf("%s",temp->data.code);
break;
case 4:printf("修改學歷 :"); //修改學歷
scanf("%s",temp->data.degree);
break;
case 5:printf("修改學院:"); //修改學院
scanf("%s",temp->data.department);
case 6:printf("修改專業:");//修改專業
scanf("%s",temp->data.zuanye);
break;
default: break;
}
printf("請選擇選項:");
scanf("%d",&choice2); //再次選擇菜單選項
}
}
break;
//----------------------------------------------------------------
//選項5,刪除給定學號的學生
case 5: printf("\n輸入學號 :"); //輸入學號
scanf("%s", tempcode);
temp=studentlist;
p=temp;
while(temp!=NULL) //尋找相應的學生
{
if(strcmp(tempcode,temp->data.code)==0) break;
p=temp;
temp=temp->next;
}
if(temp==NULL) printf("\n找不到該學生信息.\n"); //找不到
else if(temp==studentlist) {studentlist=temp->next; free(temp);}
else {
p->next=temp->next;//找到時刪除
free(temp);
}
break;
//------------------------------------------------------------------
//選項6,統計功能
case 6: print_static_function_menu();
scanf("%d",&choice6);//選擇菜單選項
while(choice6!=4)
{
switch(choice6)
{
//選項1,統計男女個數
case 1:temp=studentlist;
count_male=0; //男生數
count_female=0; //女生數
while(temp!=NULL) //檢索鏈表查找
{
if(strcmp(temp->data.sex,"男")==0) count_male++;
if(strcmp(temp->data.sex,"女")==0) count_female++;
temp=temp->next;
}
printf("男: %d\n",count_male);
printf("女: %d\n",count_female);
break;
//選項2,統計給定班級的人數
case 2:printf("請輸入班級號:");
scanf("%s",tempclass); //給定班級
temp=studentlist;
count=0;
while(temp!=NULL) //檢索鏈表查找
{
if(compareCode(temp->data.code,tempclass)==1) count++;
temp=temp->next;
}
printf("%s班級總人數為: %d\n",tempclass,count);
break;
case 3:printf("請輸入專業:");
scanf("%s",tempzuanye); //給定專業
temp=studentlist;
count=0;
while(temp!=NULL) //檢索鏈表查找
{
if(strcmp(temp->data.zuanye,tempzuanye)==0) count++;
temp=temp->next;
}
printf("%s專業總人數為: %d\n",tempzuanye,count);
break;
//預設項
default: break;
}
printf("請選擇選項:");
scanf("%d",&choice6);
}
break;
//-----------------------------------------------------------------
default:free(p); break;
}
if((fp=fopen("d:\\學生證管理程序.dat","wb"))==NULL)
{
printf("文件無法打開!");
return;
}
p=studentlist;
while(p)
{
fwrite(&p->data,sizeStu,1,fp);
p=p->next;
}
fclose(fp);
print_menu( );//列印菜單 進入循環
scanf("%d",&choice);
}
}
『陸』 怎樣用C語言寫學生成績管理系統
程序如下: #include<stdio.h>
void main()
{
float student[100][7];
//student[][0]存放學號,student[][1]到student[][4]存放四門成績,
//student[][5]存放總分,student[][6]存放平均分,student[][7]存放排名
int n,i,j,k,p,t,count,flag;
int a[100],b[100],c[100];
//a[]存放排序後的下標,b[]存放總分(備份),c[]存放排名的數據
printf("輸入學生的個數:\n");
scanf("%d",&n);
for(i=0;i<=n-1;i++)
{
printf("輸入第%d個學生的學號:",i+1);
scanf("%f",&student[i][0]);
for(j=0,student[i][5]=0;j<=3;j++)
{
printf("輸入第%d個學生的第%d門成績:",i+1,j+1);
scanf("%f",&student[i][j+1]);
student[i][5]+=student[i][j+1]; //計算總分
}
b[i]=student[i][5]; //把總分再賦給b[]數組,以後排序用
student[i][6]=student[i][5]/4; //計算平均分
}
for(i=0;i<=n-2;i++) //對數組b[](即總分)進行排序
for(j=0;j<=n-2-i;j++)
{
if(b[j]<b[j+1])
{
t=b[j];
b[j]=b[j+1];
b[j+1]=t;
}
}
for(i=0,k=0;i<=n-1;i++)//用數組a[]取得排序後總分的下標
{
for(j=0,flag=0;j<=n-1;j++)
{
if(b[i]==student[j][5])
{
if(0==k) //如果數組a[]中有零個元素,就把j直接賦給a[]
{
a[k]=j;
k++;
flag=1;
}
else //如果數組a[]中有元素了,則判斷
{
for(p=0;p<=k-1;p++)
if(a[p]!=j)
{
a[k]=j;
k++;
flag=1;
break;
}
}
}
if(1==flag)
break;
}
}
for(count=1,i=0;i<=n-1;i++) //對c[](排名)進行處理
{
if(b[i]==b[i+1])
{
c[i]=count;
}
else
if(b[i]>b[i+1])
{
c[i]=count;
count++;
}
}
printf("\n以下是統計結果:\n");
printf("學號 s[1] s[2] s[3] s[4] 總分 平均分 排名\n");
for(i=0;i<=n-1;i++)
{
printf("%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%.0f\t%f\t%d\n",student[a[i]][0],student[a[i]][1],student[a[i]][2],student[a[i]][3],student[a[i]][4],student[a[i]][5],student[a[i]][6],c[i]);
}
} 有疑問提出
『柒』 C語言編寫一個簡單的學生成績管理系統
C語言程序:
#include<stdio.h>
#include<string.h>
typedefstructstudent
{
charname[20]; /*姓名*/
intcode; /*學號*/
intkor,eng,math; /*3門課程的成績*/
}STUDENT;
/*返回輸入數據*/
STUDENTInput();
/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt);
/*將輸入分數轉換為A-F*/
chargrade(intscore);
intmain()
{
STUDENTS[10];
intcnt=0,select;
inti,j;
intcode;
while(1)
{
printf(" 學生信息管理系統 ");
printf(" 1 添加 ");
printf(" 2 刪除 ");
printf(" 3 查詢 ");
printf(" 0 結束 ");
printf(" 您的選擇[0-3]:");
scanf("%d",&select);
if(select<0||select>3)
continue;
if(select==0)
{
printf("退出系統! ");
break;
}
if(select==1) /*添加*/
{
S[cnt++]=Input();
}
elseif(select==2) /*刪除*/
{
printf(" 待刪除學生的學號:");
scanf("%d",&code);
for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,刪除失敗! ");
}
else{
for(j=i+1;j<cnt;j++)
{
strcpy(S[j-1].name,S[j].name);
S[j-1].code=S[j].code;
S[j-1].kor=S[j].kor;
S[j-1].eng=S[j].eng;
S[j-1].math=S[j].math;
}
cnt--;
printf("刪除成功! ");
}
}
else /*查詢*/
{
printf(" 待查找學生的學號:");
scanf("%d",&code);
for(i=0;i<cnt;i++)
if(S[i].code==code)
break;
if(i>=cnt)
{
printf("學號不存在,查找失敗! ");
}
else
{
printf(" 查詢結果: ");
Output(S,i);
}
}
}
return0;
}
/*返回輸入數據*/
STUDENTInput()
{
STUDENTstu;
printf(" 新學生信息 ");
printf(" 學號:");
scanf("%d",&stu.code);
printf(" 姓名:");
getchar();
gets(stu.name);
printf(" 3門課程成績(以空格分隔):");
scanf("%d%d%d",&stu.kor,&stu.eng,&stu.math);
returnstu;
}
/*輸出所有輸入的數據*/
voidOutput(STUDENTinfo[],intcnt)
{
printf("學號:%d ",info[cnt].code);
printf("姓名:");
puts(info[cnt].name);
printf("成績:%c%c%c ",grade(info[cnt].kor),grade(info[cnt].eng),grade(info[cnt].math));
}
/*將輸入分數轉換為A-F*/
chargrade(intscore)
{
if(score<0||score>100)
return'F';
if(score>=90)
return'A';
if(score>=80)
return'B';
if(score>=70)
return'C';
if(score>=60)
return'D';
else
return'E';
}
運行測試:

