學生管理系統c語言
挺好的一個題目啊
但我可不願意幫人寫作業
網上很多類似的,你可以參考下:
#include <stdio.h>
#include <string.h> struct student {
char name[30];
float math;
float chinese;
float english;
float average;
};
int MenuChoice(void);
int EnterAccount(void);
void Enter(struct student *fst);
void Amend(struct student *src);
void Delete(struct student *next);
void Print(struct student *out);
main()
{
struct student one[100] = {0}, *look = one;
int menu, t;
while ((menu = MenuChoice()) != 0)
if (menu >= 1 && menu <= 4 && (t = EnterAccount())) {
look = one + t;
switch (menu) {
case 1:
Enter(look);
break;
case 2:
if (strcmp(look->name, ""))
printf("學號:%d\n姓名: %s\n語文成績: %.1f\n數學成績:%.1f\n英語成績: %f\n平均"成績:%.1f\n",
t, look->name, look->chinese, look->math, look->english, look->average);
else
printf("對不起,該學號不存在!\n");
break;
case 3:
Amend(look);
break;
case 4:
Delete(look);
break;
}
}
else if (menu == 5)
Print(one);
else
printf("錯誤的請求!\n");
return 0;
}
int MenuChoice(void)
{
int choice;
printf("請選擇:\n"
"1 - 新建學生信息\n"
"2 - 查找學生信息\n"
"3 - 修改學生信息\n"
"4 - 刪除學生信息\n"
"5 - 列印學生信息\n"
"0 - 退出\n");
scanf("%d", &choice);
return choice;
}
int EnterAccount(void)
{
int ret;
printf("請輸入學號:\n");
scanf("%d", &ret);
if (ret >= 1 && ret <= 100)
return ret -1;
return 0;
}
void Enter(struct student *fst)
{
printf("請輸入學生姓名、語文成績、數學成績、英語成績和平均成績\n");
scanf("%s%f%f%f%f", fst->name, &fst->chinese, &fst->math, &fst->english, &fst->average);
}
void Amend(struct student *src)
{
int t;
printf("請選擇:\n"
"1 - 修改學生姓名\n"
"2 - 修改學生語文成績\n"
"3 - 修改學生數學成績\n"
"4 - 修改學生英語成績\n"
"5 - 修改學生平均成績\n");
scanf("%d", &t);
switch (t) {
case 1:
printf("請輸入學生的新名字\n");
scanf("%s", src->name);
break;
case 2:
printf("請輸入學生新的語文成績\n");
scanf("%f", &src->chinese);
break;
case 3:
printf("請輸入學生新的數學成績\n");
scanf("%f", &src->math);
break;
case 4:
printf("請輸入學生新的英語成績\n");
scanf("%f", &src->english);
break;
case 5:
printf("請輸入學生新的平均成績\n");
scanf("%f", &src->average);
break;
}
}
void Delete(struct student *next)
{
strcpy(next->name, "");
next->math = next->english = next->chinese = next->average = 0.0;
}
void Print(struct student *out)
{
struct student *up;
for (up = out; out < &up[100]; out++)
if (strcmp(out->name, ""))
printf("學號:%d\n姓名: %s\n語文成績: %.1f\n數學成績:%.1f\n英語成績: %.1f\n平均成績:%.1f\n",
out-up + 1, out->name, out->chinese, out->math, out->english, out->average);
}
B. c語言編寫學生信息管理系統
稍微用了點c++(你給的分太低)
如下圖所示:
studf.txt
操作日誌文件:
C. 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;
}
D. 學生信息管理系統C語言編程
#include<stdio.h> /*I/O函數*/
#include<stdlib.h> /*其它說明*/
#include<string.h> /*字元串函數*/
#define BUFLEN 100 /* 緩沖區最大字元數 */
#define LEN 15 /* 學號和姓名最大字元數,實際請更改 */
#define N 100 /* 最大學生人數,實際請更改*/
struct record /*結構體*/
{
char code[LEN+1]; /* 學號 */
char name[LEN+1]; /* 姓名 */
int age; /* 年齡 */
char sex[3]; /* 性別 */
char time[LEN+1]; /* 出生年月 */
char add[30]; /* 家庭地址 */
char tel[LEN+1]; /* 電話號碼 */
char mail[30]; /* 電子郵件地址 */
}stu[N];
int k=1,n,m; /* 定義全局變數 */
void readfile();/* 函數聲明 */
void seek();
void modify();
void insert();
void del();
void display();
void save();
void menu();
int main()
{
while(k)
menu();
system("pause");
return 0;
}
void help()
{
printf("\n0.歡迎使用系統幫助!\n");
printf("\n1.進入系統後,先刷新學生信息,再查詢;\n");
printf("\n2.按照菜單提示鍵入數字代號;\n");
printf("\n3.增加學生信息後,切記保存按7;\n");
printf("\n4.謝謝您的使用!\n");
}
void readfile()/* 建立信息 */
{
char *p="student.txt";
FILE *fp;
int i=0;
if ((fp=fopen("student.txt","r"))==NULL)
{
printf("Open file %s error! Strike any key to exit!",p);
system("pause");
exit(0);
}
while(fscanf(fp,"%s %s%d%s %s %s %s %s",stu[i].code,stu[i].name,&stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail)==8)
{
i++;
i=i;
}
fclose(fp);
n=i;
printf("錄入完畢!\n");
}
void seek() /*查找*/
{
int i,item,flag;
char s1[21]; /* 以姓名和學號最長長度+1為准 */
printf("------------------\n");
printf("-----1.按學號查詢-----\n");
printf("-----2.按姓名查詢-----\n");
printf("-----3.退出本菜單-----\n");
printf("------------------\n");
while(1)
{
printf("請選擇子菜單編號:");
scanf("%d",&item);
flag=0;
switch(item)
{
case 1:
printf("請輸入要查詢的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("該學號不存在!\n"); break;
case 2:
printf("請輸入要查詢的學生的姓名:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].name,s1)==0)
{
flag=1;
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
printf("%6s %7s %6d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
if(flag==0)
printf("該姓名不存在!\n"); break;
case 3:return;
default:printf("請在1-3之間選擇\n");
}
}
}
void modify() /*修改信息*/
{
int i,item,num;
char sex1[3],s1[LEN+1],s2[LEN+1]; /* 以姓名和學號最長長度+1為准 */
printf("請輸入要要修改的學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0) /*比較字元串是否相等*/
num=i;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年齡\n");
printf("3.修改性別\n");
printf("4.修改出生年月\n");
printf("5.修改地址\n");
printf("6.修改電話號碼\n");
printf("7.修改E-mail地址\n");
printf("8.退出本菜單\n");
printf("------------------\n");
while(1)
{
printf("請選擇子菜單編號:");
scanf("%d",&item);
switch(item)
{
case 1:
printf("請輸入新的姓名:\n");
scanf("%s",s2);
strcpy(stu[num].name,s2); break;
case 2:
printf("請輸入新的年齡:\n");
scanf("%d",&stu[num].age);break;
case 3:
printf("請輸入新的性別:\n");
scanf("%s",sex1);
strcpy(stu[num].sex,sex1); break;
case 4:
printf("請輸入新的出生年月:\n");
scanf("%s",s2);
strcpy(stu[num].time,s2); break;
case 5:
printf("請輸入新的地址:\n");
scanf("%s",s2);
strcpy(stu[num].add,s2); break;
case 6:
printf("請輸入新的電話號碼:\n");
scanf("%s",s2);
strcpy(stu[num].tel,s2); break;
case 7:
printf("請輸入新的E-mail地址:\n");
scanf("%s",s2);
strcpy(stu[num].mail,s2); break;
case 8:return;
default:printf("請在1-8之間選擇\n");
}
}
}
void sort()/*按學號排序*/
{
int i,j,*p,*q,s;
char temp[10];
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
if(strcmp(stu[j-1].code,stu[j].code)>0)
{
strcpy(temp,stu[j-1].code);
strcpy(stu[j-1].code,stu[j].code);
strcpy(stu[j].code,temp);
strcpy(temp,stu[j-1].name);
strcpy(stu[j-1].name,stu[j].name);
strcpy(stu[j].name,temp);
strcpy(temp,stu[j-1].sex);
strcpy(stu[j-1].sex,stu[j].sex);
strcpy(stu[j].sex,temp);
strcpy(temp,stu[j-1].time);
strcpy(stu[j-1].time,stu[j].time);
strcpy(stu[j].time,temp);
strcpy(temp,stu[j-1].add);
strcpy(stu[j-1].add,stu[j].add);
strcpy(stu[j].add,temp);
strcpy(temp,stu[j-1].tel);
strcpy(stu[j-1].tel,stu[j].tel);
strcpy(stu[j].tel,temp);
strcpy(temp,stu[j-1].mail);
strcpy(stu[j-1].mail,stu[j].mail);
strcpy(stu[j].mail,temp);
p=&stu[j-1].age;
q=&stu[j].age;
s=*q;
*q=*p;
*p=s;
}
}
}
void insert() /*插入函數*/
{
int i=n,j,flag;
printf("請輸入待增加的學生數:\n");
scanf("%d",&m);
do
{
flag=1;
while(flag)
{
flag=0;
printf("請輸入第 %d 個學生的學號:\n",i+1);
scanf("%s",stu[i].code);
for(j=0;j<i;j++)
if(strcmp(stu[i].code,stu[j].code)==0)
{
printf("已有該學號,請檢查後重新錄入!\n");
flag=1;
break; /*如有重復立即退出該層循環,提高判斷速度*/
}
}
printf("請輸入第 %d 個學生的姓名:\n",i+1);
scanf("%s",stu[i].name);
printf("請輸入第 %d 個學生的年齡:\n",i+1);
scanf("%d",&stu[i].age);
printf("請輸入第 %d 個學生的性別:\n",i+1);
scanf("%s",stu[i].sex);
printf("請輸入第 %d 個學生的出生年月:(格式:年.月)\n",i+1);
scanf("%s",stu[i].time);
printf("請輸入第 %d 個學生的地址:\n",i+1);
scanf("%s",stu[i].add);
printf("請輸入第 %d 個學生的電話:\n",i+1);
scanf("%s",stu[i].tel);
printf("請輸入第 %d 個學生的E-mail:\n",i+1);
scanf("%s",stu[i].mail);
if(flag==0)
{
i=i;
i++;
}
}
while(i<n+m);
n+=m;
printf("錄入完畢!\n\n");
sort();
}
void del()
{
int i,j,flag=0;
char s1[LEN+1];
printf("請輸入要刪除學生的學號:\n");
scanf("%s",s1);
for(i=0;i<n;i++)
if(strcmp(stu[i].code,s1)==0)
{
flag=1;
for(j=i;j<n-1;j++)
stu[j]=stu[j+1];
}
if(flag==0)
printf("該學號不存在!\n");
if(flag==1)
{
printf("刪除成功,顯示結果請選擇菜單6\n");
n--;
}
}
void display()
{
int i;
printf("所有學生的信息為:\n");
printf("學生學號 學生姓名 年齡 性別 出生年月 地址 電話 E-mail\n");
printf("--------------------------------------------------------------------\n");
for(i=0;i<n;i++)
{
printf("%6s %7s %5d %5s %9s %8s %10s %14s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
}
void save()
{
int i;
FILE *fp;
fp=fopen("student.txt","w"); /*寫入*/
for(i=0;i<n;i++)
{
fprintf(fp,"%s %s %d %s %s %s %s %s\n",stu[i].code,stu[i].name,stu[i].age,
stu[i].sex,stu[i].time,stu[i].add,stu[i].tel,stu[i].mail);
}
fclose(fp);
}
void menu()/* 界面 */
{
int num;
printf("*********************系統功能菜單************************ \n");
printf("友情提醒:查詢前請先刷新系統! \n");
printf(" ---------------------- ---------------------- \n");
printf(" ********************************************* \n");
printf(" * 0.系統幫助及說明 * * 1.刷新學生信息 * \n");
printf(" ********************************************* \n");
printf(" * 2.查詢學生信息 * * 3.修改學生信息 * \n");
printf(" ********************************************* \n");
printf(" * 4.增加學生信息 * * 5.按學號刪除信息 * \n");
printf(" ********************************************* \n");
printf(" * 6.顯示當前信息 * * 7.保存當前學生信息* \n");
printf(" ********************** ********************** \n");
printf(" * 8.退出系統 * \n");
printf(" ********************** \n");
printf(" ---------------------- ---------------------- \n");
printf("請選擇菜單編號:");
scanf("%d",&num);
switch(num)
{
case 0:help();break;
case 1:readfile();break;
case 2:seek();break;
case 3:modify();break;
case 4:insert();break;
case 5:del();break;
case 6:display();break;
case 7:save();break;
case 8:k=0;break;
default:printf("請在0-8之間選擇\n");
}
E. 用C語言編寫一個學生管理系統。
概述
單純只用多個數組管理學生成績信息,不使用結構體,該程序最主要的難點是依據學號或總成績對學生信息進行排序,藉助了臨時數組來標記排好序的下標。
運行結果如下:
輸入數據:
貼上代碼(有點多)
#include <stdio.h>
#include <stdlib.h> //exit函數頭文件
#include <string.h> //字元串相關操作頭文件
#define MAX_STUDENT 30 //最大學生數
//函數聲明,本程序共10個子函數,每個函數對應一個操作
void student_scanf(int n);
void student_printf(int n);
int student_find_name(int n);
int student_find_num(int n);
void student_sort_num(int n);
void student_sort_sum(int n);
int student_alter_num(int n);
int student_alter_name(int n);
int student_delete_num(int n);
int student_delete_name(int n);
//全局數組變數,用於存儲學生信息
char names[MAX_STUDENT][50];
int math[MAX_STUDENT];
int english[MAX_STUDENT];
int computer[MAX_STUDENT];
int sum[MAX_STUDENT];
int num[MAX_STUDENT];
//以下變數用於學生信息數組排序,作為臨時數組
int temp_num[MAX_STUDENT];
char temp_names[MAX_STUDENT][50];
int temp_math[MAX_STUDENT];
int temp_english[MAX_STUDENT];
int temp_computer[MAX_STUDENT];
int temp_sum[MAX_STUDENT];
//sort數組存儲排好序的學號或姓名下標
int sort[MAX_STUDENT];
//循環全局變數
int i, j;
//main主函數
int main(void)
{
int choice,n;
while (1)
{
printf("************************************* ");
printf("歡迎使用學生成績管理系統 ");
printf("[1] 輸入所有學生信息 ");
printf("[2] 輸出所有學生成績 ");
printf("[3] 按學號查找某個學生信息 ");
printf("[4] 按姓名查找某個學生信息 ");
printf("[5] 按學號對學生排序 ");
printf("[6] 按總成績對學生排序 ");
printf("[7] 按學號修改某個學生信息 ");
printf("[8] 按姓名修改某個學生信息 ");
printf("[9] 按學號刪除某個學生信息 ");
printf("[10] 按姓名刪除某個學生信息 ");
printf("[0] 退出程序 ");
printf("請輸入您的選擇(0 - 9):");
scanf("%d",&choice);
printf("**************************************) ");
switch (choice)
{
case 1://錄入;
printf("請輸入錄入的學生信息數: ");
scanf("%d",&n);
student_scanf(n);
break;
case 2://輸出;
student_printf(n);
break;
case 3://根據學號查找
student_find_num(n);
break;
case 4://根據姓名查找
student_find_name(n);
break;
case 5://按學號排序
student_sort_num(n);
break;
case 6://按姓名排序
student_sort_sum(n);
break;
case 7://按學號修改
student_alter_num(n);
break;
case 8://按姓名修改
student_alter_name(n);
break;
case 9://按學號刪除
student_delete_num(n);
n--;
break;
case 10://按姓名刪除
student_delete_name(n);
n--;
break;
case 0://退出程序
printf("退出程序 ");
printf("程序結束,謝謝使用! ");
exit(0);
default:
printf("您輸入的菜單有誤。請重新輸入! ");
}
}
return 0;
}
//1.輸入信息
void student_scanf(int n)
{
for (i = 0; i<n; ++i)
{
printf(" 請輸入第%d個學生的信息: ", i + 1);
printf(" 學號:");
scanf("%d", &num[i]);
printf(" 姓名:");
scanf("%s", names[i]);
printf(" 數學成績:");
scanf("%d", &math[i]);
printf(" 英語成績:");
scanf("%d", &english[i]);
printf(" 計算機成績:");
scanf("%d", &computer[i]);
//計算總成績
sum[i] = math[i] + english[i] + computer[i];
}
}
//2.列印信息
void student_printf(int n)
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("---------------------------------------------------------- ");
for (i = 0; i<n; ++i)
{
printf("%d %s %d %d %d %d ", num[i], names[i], math[i], english[i], computer[i], sum[i]);
}
printf("------------------------------------------------------- ");
}
//3.按學號查找
int student_find_num(int n)
{
int nums;
int result;
printf("請輸入待查找的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else
{
//先列印表頭
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
//再列印數據
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("列印出查找結果! ");
}
return 1;
}
//4.用姓名查找成績
int student_find_name(int n)
{
char name[200];
int result;
printf("請輸入待查找的學生姓名:");
scanf("%s", name);
result = -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name, names[i]) == 0)
{
result = i;
break;
}
}
if (result == -1)
{//未找到結果
printf("沒有該學生信息! ");
return 0;
}
else//找到結果
{
printf(" 學號 姓名 數學成績 英語成績 計算機成績 總成績 ");
printf("%d %s %d %d %d %d ", num[result], names[result], math[result], english[result], computer[result], sum[result]);
printf("已完成查找! ");
}
return 1;
}
//5.按學號排序
void student_sort_num(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_num[i] = num[i];
}
max = 0; //查找學號最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_num[max]<temp_num[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找學號最小值
for(j=0; j<n; ++j)
{
if(temp_num[min]>temp_num[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_num[min] = temp_num[max]; //利用臨時數組將查找過的學生信息的學號設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//6.按總成績排序
void student_sort_sum(int n)
{
int min,max;
for(i=0; i<n; ++i) //復制臨時數組
{
temp_sum[i] = sum[i];
}
max = 0; //查找總成績最大值,將其下標存至sort數組的最後一個值中
for(j=1; j<n; j++)
{
if(temp_sum[max]<temp_sum[j])
max = j;
}
sort[n-1] = max; //sort數組的最後一個數
for(i=0; i<n-1; ++i)
{
min = i; //查找總成績最小值
for(j=0; j<n; ++j)
{
if(temp_sum[min]>temp_sum[j])
min = j;
}
//sort數組記錄排序的學生信息的下標
sort[i] = min;
temp_sum[min] = temp_sum[max]; //利用臨時數組將查找過的學生信息的總成績設為最大值,排除查找干擾
}
for(i=0; i<n; ++i) //再復制一次臨時數組
{
temp_num[i] = num[i];
strcpy(temp_names[i],names[i]);
temp_math[i] = math[i];
temp_english[i] = english[i];
temp_computer[i] = computer[i];
temp_sum[i] = sum[i];
}
for(i=0; i<n; i++) //按照下標對原數組進行修改
{
num[i] = temp_num[sort[i]];
strcpy(names[i],temp_names[sort[i]]);
math[i] = temp_math[sort[i]];
english[i] = temp_english[sort[i]];
computer[i] = temp_computer[sort[i]];
sum[i] = temp_sum[sort[i]];
}
printf("排序完畢,請按菜單鍵2查看排序結果! ");
return ;
}
//7.按學號修改學生信息
int student_alter_num(int n)
{
int nums;
int result;
printf("請輸入待修改的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//8.按姓名修改學生信息
int student_alter_name(int n)
{
char name[50];
int result;
printf("請輸入待修改的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //修改信息值
{
printf("請重新輸入該學生信息: ");
printf("學號: ");
scanf("%d",&num[result]);
printf("姓名: ");
scanf("%s",names[result]);
printf("數學成績: ");
scanf("%d",&math[result]);
printf("英語成績: ");
scanf("%d",&english[result]);
printf("計算機成績: ");
scanf("%d",&computer[result]);
sum[result] = math[result] + english[result] + computer[result];
}
return 1;
}
//9.按學號刪除學生信息
int student_delete_num(int n)
{
int nums;
int result;
printf("請輸入待刪除的學生學號:");
scanf("%d",&nums);
result= -1;
for (i = 0; i<n; ++i)
{
if (nums == num[i])
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
//10.按姓名刪除學生信息
int student_delete_name(int n)
{
char name[50];
int result;
printf("請輸入待刪除的學生姓名:");
scanf("%s",name);
result= -1;
for (i = 0; i<n; ++i)
{
if (strcmp(name,names[i])==0)
{
result = i;
break;
}
}
//最後判斷q值
if (result == -1)
{
printf("沒有該學生信息! ");
return 0;
}
else //刪除當前學生信息即為將數組從result的位置依次前挪一個位置
{
for(i=result; i<n-1; ++i) //最後在main函數中,要將n的值減1
{
num[i] = num[i+1];
strcpy(names[i],names[i+1]);
math[i] = math[i+1];
english[i] = english[i+1];
computer[i] = computer[i+1];
sum[i] = sum[i+1];
}
}
return 1;
}
F. 學生管理系統C語言
#include<stdio.h>
#define N 30
int Input1(long xuehao[],int score[],int n);
int Sum(int score[],int n);
int No3(long xuehao[],int score[],int n);
int No4(long xuehao[],int score[],int n);
int No5(long xuehao[],int score[],int n);
int No6(int score[],int n);
int Input1(long xuehao[],int score[],int n){
int i;
printf("輸入學號和成績\n");
for(i=0;i<n;i++){
scanf("%ld %d",&xuehao[i],&score[i]);
}
// for(i=0;i<n;i++){
// printf("學號%ld 成績%d\n",xuehao[i],score[i]);
//}
}
int Sum(int score[],int n){
int sum;
float aver;
sum=0; aver=0;
int i;
for(i=0;i<n;i++){
sum=sum+score[i];
}
aver=(float)sum/n;
printf("總分為%d,平均分為%.2f",sum,aver);
}
int No3(long xuehao[],int score[],int n){
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(score[j]>score[k]){ k=j; }
}
if(k!=i){
/*交換成績*/
temp1=score[k];score[k]=score[i];score[i]=temp1;
/*交換學號*/
temp2=xuehao[k];xuehao[k]=xuehao[i];xuehao[i]=temp2;
}
}
int a;
printf("按成績高低排序\n");
for(a=0;a<n;a++){
printf("學號%ld 成績%d\n",xuehao[a],score[a]);
}
}
int No4(long xuehao[],int score[],int n){
int i,j,k,temp1;
long temp2;
for(i=0;i<n-1;i++){
k=i;
for(j=i+1;j<n;j++){
if(xuehao[j]>xuehao[k]){ k=j; }
}
if(k!=i){
/*交換學號*/
temp1=xuehao[k];xuehao[k]=xuehao[i];xuehao[i]=temp1;
/*交換成績*/
temp2=score[k];score[k]=score[i];score[i]=temp2;
}
}
int a;
printf("按學號排序\n");
for(a=0;a<n;a++){
printf("學號%ld 成績%d\n",xuehao[n-1-a],score[n-1-a]);
}
}
int No5(long xuehao[],int score[],int n){
int i,a;
long x;
No3(xuehao,score,n);
printf("輸入學號\n");
scanf("%ld",&x);
for(i=0;i<n;i++){
if(xuehao[i]==x){
a=i;
break;
}
}
printf("學號%ld 成績%d 排名%d\n ",xuehao[a],score[a],a+1);
}
int No6(int score[],int n){
int i;
int a=0,b=0,c=0,d=0,e=0;
float a1,b1,c1,d1,e1;
for(i=0;i<n;i++){
if(score[i]>=90) {a++; }
else if(score[i]>=80){b++; }
else if(score[i]>=70) {c++; }
else if(score[i]>=60) {d++; }
else {e++; printf("e is%d",e);}
}
a1=(float)a/n*100;b1=(float)b/n*100;c1=(float)c/n*100;d1=(float)d/n*100;e1=(float)e/n*100;
printf("優秀%d %.1f%%\n良好%d %.1f%% \n中等%d %.1f%% \n及格%d %.1f%%\n不及格%d %.1f%%\n",a,a1,b,b1,c,c1,d,d1,e,e1);
// printf("%.2f %.2f %.2f %.2f %.2f\n",a1,b1,c1,d1,e1);
}
int No7(long xuehao[],int score[],int n){
int i;
for(i=0;i<n;i++){
printf("學號%ld 成績%d\n",xuehao[i],score[i]);
}
Sum(score,n);
}
main(){
int score[N];
long xuehao[N];
int n;
printf("1.Input record\n");
printf("2.caculate total and average score of course\n");
printf("3.sort in descending order by score\n");
printf("4.sort in ascending order by score\n");
printf("5.search by number \n");
printf("6.statistic analysis\n");
printf("7.list record\n");
printf("0.exit\n");
int num;
printf("人數(不許超過30!不許超過30!不許超過30)\n");
do{scanf("%d",&n);}while(n<1 || n>30);
if(n>30) printf("wrong!\n");
//printf("輸入選項\n");
//scanf("%d",&num);
int p=1; //控制結束
do{
printf("輸入選項\n");
scanf("%d",&num);
switch(num){
case 1:
Input1(xuehao,score,n);
break;
case 2: Sum(score,n);
break;
case 3: No3(xuehao,score,n);
break;
case 4: No4(xuehao,score,n);
break;
case 5: No5(xuehao,score,n);
break;
case 6: No6(score,n);
break;
case 7: No7(xuehao,score,n);
break;
case 0: p=-1;
break;
}
}while(p!=-1);
return 0;
}
G. 學生信息管理系統用C語言實現,
#include"stdio.h"
#include"conio.h"
#include"string.h"
#include"stdlib.h"
void look(); /*聲明查看函數*/
void save(); /*聲明保存函數*/
void search_name(); /*聲明按姓名查看函數*/
void search_number(); /*聲明按學號查看函數*/
void order(); /*聲明排序函數*/
void del(); /*聲明刪除函數*/
int openl(); /*聲明打開函數*/
void welcome(); /*聲明我的個人信息函數*/
void type(); /*聲明輸入函數*/
void see(); /*聲明打開並查看文件函數*/
struct student /*定義學生信息的結構體類型*/
{
char num[15]; /*學號*/
char name[20]; /*姓名*/
char sex[4]; /*性別*/
int english; /*英語成績*/
int math; /*數學成績*/
int chinese; /*語文成績*/
float aver; /*平均成績*/
float sum; /*總成績*/
}stu[100];
int n; /*聲明一個全局變數*/
void main() /*主函數即用戶的操作界面*/
{
system("color 1E"); /*設計文本顏色*/
int b,flag=0; /*聲明局部變數*/
while(1) /*循環輸出以下信息*/
{
printf("\n\t\t\t歡迎來到學生成績管理系統!\n");
printf("\n\t\t\t\t ###製作\n");
printf("\t\t\t-------------------------------\n");
printf("\t\t\t1.鍵入學生的信息\n\n"); /*鍵入學生的信息*/
printf("\t\t\t2.查看錄入的學生信息\n\n"); /*查看錄入的學生信息*/
printf("\t\t\t3.按姓名查看學生的信息\n\n"); /*按姓名查看學生的信息*/
printf("\t\t\t4.按學號查看學生的信息\n\n"); /*按學號查看學生的信息*/
printf("\t\t\t5.按平均成績排序\n\n"); /*排序*/
printf("\t\t\t6.刪除學生信息\n\n"); /*刪除學生信息*/
printf("\t\t\t7.保存學生信息\n\n"); /*保存*/
printf("\t\t\t8.打開文件\n\n"); /*打開文件*/
printf("\t\t\t9.我的個人信息\n\n"); /*我的個人信息*/
printf("\t\t\t0.退出\n\n"); /*退出*/
printf("\t\t\t請輸入你的選擇:");
scanf("%d",&b);
switch(b)
{
case 1:type();break; /*調用鍵入學生信息函數*/
case 2:look();break; /*調用查看函數*/
case 3:search_name();break; /*調用姓名查看函數*/
case 4:search_number();break; /*調用學號查看函數*/
case 5:order();break; /*調用排序函數*/
case 6:del();break;/*調用刪除函數*/
case 7:save();break;/*調用保存函數*/
case 8:see();break;/*調用打開文件函數*/
case 9:welcome();break;/*調用我的個人信息函數*/
case 0:flag=1;break;/*退出SWITCH語句*/
default :printf("錯誤!");
}
if(flag) break; /*如果選擇0就退出循環*/
}
}
void welcome() /*我的個人信息函數*/
{
system("CLS");
printf("\n\n\t\t------------個人信息------------"); /*在屏幕上輸出一下信息*/
printf("\n\n\n\n\t\t姓名:###");
printf("\t\t\tSex:#\n");
printf("\t\t年齡:#\n");
printf("\n\t\t\t--------學習經歷--------\n\n\n");
printf("\t\t小學:######\n\n");
printf("\t\t初中:#####\n\n");
printf("\t\tS高中:######\n\n");
printf("\t\t大學:######\n\n");
printf("\n\n\t\t按任意鍵返回歡迎屏幕!");
getch(); /*按任意鍵返回主函數*/
}
void type() /*定義鍵入學生信息函數*/
{
system("CLS");
int i; /*定義局部變數*/
printf("\t\t輸出你想輸入的學生信息個數:");
scanf("%d",&n);
for(i=0;i<n;i++) /*輸入每個學生的信息*/
{
printf("\n\t\t\t----------------\n");
printf("\t\t\t學號:");
scanf("%s",&stu[i].num); /*輸入學號*/
printf("\t\t\t姓名:");
scanf("%s",&stu[i].name); /*輸入姓名*/
printf("\t\t\t性別:");
scanf("%S",&stu[i].sex); /*輸入性別*/
printf("\t\t\t英語:");
scanf("%d",&stu[i].english); /*輸入英語成績*/
printf("\t\t\t數學:");
scanf("%d",&stu[i].math); /*輸入數學成績*/
printf("\t\t\t語文:");
scanf("%d",&stu[i].chinese); /*輸入語文成績*/
stu[i].aver=((float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese)/3;/*計算平均成績*/
stu[i].sum=(float)stu[i].english+(float)stu[i].math+(float)stu[i].chinese;/*計算總成績*/
printf("\t\t\t平均成績=%4.1f\n",stu[i].aver); /*輸出平均成績*/
printf("\t\t\t總成績=%4.1f\n",stu[i].sum); /*輸出總成績*/
}
printf("\n\n\t\t\t按任意鍵返回菜單!!");
getch();
save();
}
void save() /*建立保存文件函數*/
{
system("CLS");
FILE *fp; /*定義文件型指針*/
int i;
if((fp=fopen("student.txt","wb"))==NULL) /*打開輸出文件*/
{
printf("不能打開文件!\n");
return; /*終止程序*/
}
for(i=0;i<n;i++) /*向student文件中寫入信息*/
if(fwrite(&stu[i],sizeof(struct student),1,fp)!=1)
printf("文件寫入錯誤\n");
fclose(fp); /*關閉文件*/
printf("\n\n\n\n\t\t\t學生信息保存成功!\n");
printf("\n\n\n\n\t\t\t按任意鍵返回菜單!!");
getch();
}
void look() /*定義查看函數*/
{
system("CLS");
int i;
//n=openl(); /*調用openl函數*/
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++) /*輸出所有的學生信息*/
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意鍵返回菜單");
getch();
}
void search_name() /*按姓名查看函數*/
{
system("CLS");
int i;
char name[20]; /*聲明字元數組*/
printf("\t\t\t請輸入學生姓名:\n");
scanf("%s",name);
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++)
if(strcmp(stu[i].name,name)==0) /*將輸入的姓名與結構體中的姓名進行比較*/
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
printf("\n\n\n\t\t\t按任意鍵返回菜單");
}
getch();
}
void search_number() /*定義按學號查看函數*/
{
system("CLS");
int i;
char number[15]; /*聲明字元數組*/
printf("\t\t\t請輸入學號:\n");
scanf("%s",number);
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++)
if(strcmp(stu[i].num,number)==0) /*將輸入的學號與結構體中的學號進行比較*/
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
printf("\n\n\n\t\t\t按任意鍵返回菜單");
getch();
}
void order() /*定義排序函數*/
{
system("CLS");
int i,j;
char a;
struct student temp; /*聲明結構體變數*/
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++) /*對數據進行排序*/
{
for(j=i+1;j<n;j++)
if(stu[i].sum<stu[j].sum)
{
temp=stu[i];
stu[i]= stu[j];
stu[j]=temp;
}
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
getch();
printf("是否保存?(y or n)");
getchar();
scanf("%c",&a);
if(a=='y') /*是否保存排序後的文件*/
save();
else
printf("退出");
getch();
}
void del() /*定義刪除學生信息函數*/
{
int i;
char a;
char name[20];
system("CLS");
printf("\t\t\t輸入學生名字:\n");
scanf("%s",name);
system("CLS");
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++)
if(strcmp(stu[i].name,name)==0)
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
getch();
printf("真的刪除?(y or n)");
getchar();
scanf("%c",&a);
if(a=='y') /*是否刪除該信息*/
{
for(;i<n;i++)
stu[i]=stu[i+1];
n=n-1;
printf("你已經刪除信息");
}
else
printf("退出");
getch();
}
save();
}
int openl() /*定義打開文件函數*/
{
system("CLS");
int i;
FILE *fp;
if((fp=fopen("student.txt","rb"))==NULL)
{
printf("Cannot open file.\n");
exit(0);
}
for(i=0;!feof(fp);i++)
fread(&stu[i],sizeof(struct student),1,fp);
fclose(fp);
return(i-1);
}
void see() /*打開並查看文件*/
{
system("CLS");
int i;
n=openl();
printf("文件打開成功!\n");
printf("按任意鍵查看!\n");
getch();
printf("\t學號\t姓名\t性別\t英語\t數學\t語文\t平均成績\t總成績\n");
for(i=0;i<n;i++) /*輸出所有的學生信息*/
{
printf("%10s\t%s\t%2s\t%d\t%d\t%d\t%3.1f\t\t%6.1f\n",stu[i].num,stu[i].name,
stu[i].sex,stu[i].english,stu[i].math,stu[i].chinese,stu[i].aver,stu[i].sum);
}
printf("\n\n\n\t\t\t按任意鍵返回菜單");
getch();
請採納答案,支持我一下。
H. c語言 學生管理系統
太煩了,簡短一點比較好!
I. 學生信息管理系統c語言程序
我給你做的是20個人的,至於科目數,你加一下就夠了
#include<stdio.h>
#include<string.h>
#define
N
20//定義學生的個數
struct
student//學生的結構體
{
int
num;
char
name[8];
int
yuwen;
int
shuxue;
int
yingyu;
int
wuli;
}st[N];
void
main()
{
struct
student
t;
//用於後面做冒泡排序時的中間變數
printf("輸入%d名學生的相關信息:\n",N);
//N是你在前面用宏定義的
//你要輸入幾個學生的信息改變N值就可以了
printf("**************************************************\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(int
i=0;i<N;i++)
scanf("%d%s%d%d%d%d",&st[i].num,st[i].name,&st[i].yuwen,&st[i].shuxue,&st[i].yingyu,&st[i].wuli);
printf("**************************************************\n");
printf("學號
姓名
平均分\n");
double
avr[N];
for(i=0;i<N;i++)
{
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("%d\t\t%s\t%.2lf",st[i].num,st[i].name,avr[i]);
//注意這里的.2lf是說保留兩位小數的格式描述符.2的意思是幾位小數位
printf("\n");
}
printf("輸入你要查詢學生的序號,是第幾個學生\n");
scanf("%d",&i);
printf("學號
姓名
語文
數學
英語
物理\n");
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i-1].num,st[i-1].name,st[i-1].yuwen,st[i-1].shuxue,st[i-1].yingyu,st[i-1].wuli);
//這是用來選擇你要排序的種類的,注意是中文的輸入
printf("按照語文成績進行排序:\n");
printf("**************************************************\n");
//下面是冒泡排序
//例如按照語文成績排序
for(i=0;i<N-1;i++)
for(int
j=0;j<N-i-1;j++)
if(st[j].yuwen<=st[j+1].yuwen)
{
t=st[j];
st[j]=st[j+1];
st[j+1]=t;
}
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
//不及格的人
printf("**************************************************\n");
//這里必須要在算品均成績,應為交換之後,順序變了
for(i=0;i<N;i++)
avr[i]=(st[i].yuwen+st[i].shuxue+st[i].yingyu+st[i].wuli)/4.0;
printf("不及格人名單如下:\n");
printf("學號
姓名
語文
數學
英語
物理\n");
for(i=0;i<N;i++)
if(avr[i]<60.0)
printf("%d\t\t%s
%d
%d
%d
%d\n",st[i].num,st[i].name,st[i].yuwen,st[i].shuxue,st[i].yingyu,st[i].wuli);
}
J. C語言學生管理系統
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>
#define max 20
typedef struct student //學生
{
char sno[max]; // 學號
char sname[max]; //姓名
char sex[max]; //性別
char age[max]; //年齡
char depart[max]; //系
char classs[max]; //班
char grade[max]; //年級
struct student* next;
} student;
student* head;
int LogOn() //登錄模塊,已實現輸入密碼不回顯,如果中途發現輸錯某幾位,可退格鍵重輸
{
char username[max],password[max];
printf("\n請輸入用戶名:");
scanf("%s",username);
printf("\n請輸入密碼(最多15位):");
//開始以不回顯且支持退格方式獲取輸入密碼
int i=0;
while((i>=0)&&(password[i++]=getch())!=13)//條件i>=0是用於限制退格的范圍
{
if(password[i-1]=='\b')//對退格鍵的處理
{
printf("%c%c%c",'\b','\0','\b');
i=i-2;
}
else
printf("*");
}
password[--i]='\0';
//已獲取密碼。驗證用戶身份
if(!strcmp(username,"zhang")&&!strcmp(password,"8147086"))
{
printf("\n登錄成功!");
return 1;
}
else
return 0;
}
void regist()
{
char ch;
student *s,*ptr; //s用來建新結點,ptr用來暫存頭結點
do
{
s=(student*)malloc(sizeof(student)); // 新建一個學生結點
printf("\n開始注冊..."); //開始注冊
printf("\n請輸入該學生的學號:");
scanf("%s",s->sno);
printf("\n請輸入該學生的姓名:");
scanf("%s",s->sname);
printf("\n請輸入該學生的性別:");
scanf("%s",s->sex);
printf("\n請輸入該學生的年齡:");
scanf("%s",s->age);
printf("\n請輸入該學生的系:");
scanf("%s",s->depart);
printf("\n請輸入該學生所在的班:");
scanf("%s",s->classs);
printf("\n請輸入該學生所在的年級");
scanf("%s",s->grade);
ptr=head;
head=s;//將新結點插入隊頭
s->next=ptr;
fflush(stdin);
printf("\n請問是否繼續注冊?(Y/N)");
scanf("%c",&ch);
}while(ch=='Y'||ch=='y');
return;
}
void ElePrint(char str[]) //輸出單個元素
{
if(str==NULL) exit(0);
printf("%s",str);
for(unsigned int i=0;i<12-strlen(str);i++) printf(" ");//為了對齊輸出,需插入一些空格
return;
}
int LinePrint(student *ptr) //輸出一行
{
if(ptr==NULL) //檢查傳進來的指針
return 0;
printf("\n");
ElePrint(ptr->sno);
ElePrint(ptr->sname);
ElePrint(ptr->age);
ElePrint(ptr->sex);
ElePrint(ptr->depart);
ElePrint(ptr->classs);
ElePrint(ptr->grade);
return 1;
}
void print() //輸出全部學生信息
{
student *ptr=head;
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(ptr)
{
LinePrint(ptr);
ptr=ptr->next;
}
printf("\n");
return;
}
void search()//查詢模塊
{
int method;//查詢方式
char no[max],name[max],departm[max],clss[max],grades[max]; //用來接收查詢關鍵字
while(1)
{
printf("\n請選擇查詢方式");
printf("\n1.按學號查詢");
printf("\n2.按姓名查詢");
printf("\n3.按所在系查詢");
printf("\n4.按所在班級查詢");
printf("\n5.按所在年級查詢");
printf("\n6.列印全部學生信息");
printf("\n7.返回主菜單\n");
scanf("%d",&method);
student *p=head,*temp;
switch(method)
{
case 1:
printf("\n請輸入要查詢的學號:");
scanf("%s",no);
while(p)
{
if(!strcmp(p->sno,no))
break;
else
{
temp=p;
p=p->next;
}
}
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
LinePrint(p);
break;
case 2:
printf("\n請輸入要查詢的姓名:");
scanf("%s",name);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->sname,name))
LinePrint(p);
p=p->next;
}
break;
case 3:
printf("\n請輸入學生所在的系:");
scanf("%s",departm);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->depart,departm))
LinePrint(p);
p=p->next;
}
break;
case 4:
printf("\n請輸入學生所在的班:");
scanf("%s",clss);
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->classs,clss)&&!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 5:
printf("\n請輸入學生所在的年級:");
scanf("%s",grades);
printf("\n學號 姓名 年齡 性別 系 班 年級 ");
while(p)
{
if(!strcmp(p->grade,grades))
LinePrint(p);
p=p->next;
}
break;
case 6:
print();
break;
case 7:
return;
default:
printf("很抱歉,暫無此查詢方式!");
break;
}
}
}
void modify()//修改學生信息
{
char num[max];
student *p=head;
printf("\n請輸入要修改的學生的學號:");
scanf("%s",num);
while(p)
{
if(!strcmp(p->sno,num))
break;
else
p=p->next;
}
if(p==NULL)
{
printf("\n錯誤:沒有此學生的信息!\n");
return;
}
LinePrint(p);
printf("\n請輸入要修改的該學生的信息:");
printf("\n1.姓名");
printf("\n2.性別");
printf("\n3.年齡");
printf("\n4.所在的系");
printf("\n5.所在的班");
printf("\n6.所在的年級");
char name1[max],sex1[max],age1[max],depart1[max],class1[max],grade1[max];
int select;
fflush(stdin);
scanf("%d",&select);
printf("\n請輸入新的信息:");
switch(select)
{
case 1:
scanf("%s",name1);
strcpy(p->sname,name1);
break;
case 2:
scanf("%s",sex1);
strcpy(p->sex,sex1);
break;
case 3:
scanf("%s",age1);
strcpy(p->age,age1);
break;
case 4:
scanf("%s",depart1);
strcpy(p->depart,depart1);
break;
case 5:
scanf("%s",class1);
strcpy(p->classs,class1);
break;
case 6:
scanf("%s",grade1);
strcpy(p->grade,grade1);
break;
default:
printf("\nError!");
break;
}
LinePrint(p);
return;
}
void del()// 刪除某學生的信息
{
student *p=head,*temp=head,*s;
char num1[max];
printf("\n請輸入要刪除的學生的學號:");
scanf("%s",num1);
while(p)//查找該學生所在的結點
{
if(!strcmp(p->sno,num1))
break;
else
{
temp=p;
p=p->next;
}
}//while
if(!p)
{
printf("\n不存在此學生的信息.");
return;
}
LinePrint(p);//輸出該學生的信息
printf("\n請問真的要刪除該學生的信息嗎?(Y/N)");
char ch;
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
{
s=p->next;
temp->next=s;
free(p);
printf("\n已經刪除該學生的信息.");
}
return;
}
void sort() //排序模塊。將學生記錄按學號從小到大排列。用起泡排序演算法實現
{
student *ptr,*s=head,*p;
int count=0,count1;
while(s)//統計鏈表結點個數
{
count++;
s=s->next;
}
for(int i=1;i<count;i++)
{
ptr=head;
p=NULL;
count1=count-i; //用來控制每輪起泡排序的終點,即每次把學號最小的結點移到倒數第i個結點
while(ptr&&ptr->next&&(count1--))
{
if(strcmp(ptr->sno,ptr->next->sno)>0)
{
s=ptr->next;
ptr->next=s->next;
if(p==NULL) //ptr處於隊頭時
head=s;
else
p->next=s;
s->next=ptr;
p=s;
}
else
{
ptr=ptr->next;
if(p==NULL) //ptr處於隊頭時
p=head;
else
p=p->next;
}
}
}
return;
}
void quit()
{
char ch;
printf("\n真的要退出?(Y/N)");
fflush(stdin);
scanf("%c",&ch);
if(ch=='Y'||ch=='y')
exit(0);
return;
}
int main()
{
int option;
printf("\nCopyright@2005 KongXinCai All rights reserved.");
printf("\n歡迎使用學生信息管理系統!\n");
//登錄模塊
int icheck=0;
while(icheck<3)
{
if(LogOn()==0)
icheck++;
else
break;
}
if(icheck==3)
{
printf("\n連續登錄三次不成功,退出!");
exit(0);
}
//系統界面
while(1)
{
printf("\n\n請選擇需要的服務:");
printf("\n1.注冊");
printf("\n2.查詢");
printf("\n3.修改");
printf("\n4.刪除");
printf("\n5.排序");
printf("\n7.求平均");
printf("\n6.退出\n");
scanf("%d",&option);
switch(option)
{
case 1:
regist();
break;
case 2:
search();
break;
case 3:
modify();
break;
case 4:
del();
break;
case 5:
sort();
break;
case 6:
quit();
break;
}
}
return 0;
}