1、學生信息管理系統的資料庫設計
選修課一張表:課程,課程編號
學生一張表:個人信息,學號(班級學院可內在做一張關聯也可容在這張表裡,關聯的話,會有一個班級的屬性,會再多一張班級表)
映射關系一張表:課程編號、學號(成績)
通過最後一張表關聯前兩張就可以了,可以再最後一張里加成績,就成了成績與科目人關聯的表了
主鍵、外鍵都是學號和課程編號
2、c語言編寫學生信息管理系統
/*好吧,其實你可以上網看看,那麼多的,你可以自己修改下*/
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#include <stdlib.h>
#define NULL 0
#define LEN sizeof(struct student)
struct student
{
char name[20];
long int num;
char sex[4];
int age;
char address[30];
double tele_num;
char aihao[20];
struct student *next;
};//定義一個結構題
int TOTAL_NUM = 0;//學生總數
struct student *head = NULL;
void welcome (); //歡迎界面
void mainmenu (); //主界面
void record (); //記錄數據
void insert(struct student *stu); //插入數據
void display(struct student *stu); //顯示一個學生的信息
void displayAll (); //顯示所有學生的信息
void query_by_num (); //按學號查詢學生信息
void readData (); //讀取文件里學生的信息
void writeData (); //向文件寫入學生信息
void freeAll (); //清空鏈表內容
void del (); //刪除學生信息
void change (); //更改學生信息
void devise (struct student *p); //選擇更改內容
int main (void)
{
welcome ();
//顯示主菜單
mainmenu ();
return 0;
}
//顯示歡迎信息
void welcome ()
{
printf ("+----------------------------------------------------+\n");
printf ("| |\n");
printf ("| 歡迎使用網路工程學院信息安全092班學生信息管理系統 |\n");
printf ("| |\n");
printf ("+----------------------------------------------------+\n");
}
//系統主菜單
void mainmenu ()
{
int choice;
choice = -1;
readData ();
printf ("\n溫馨提示:為保證您的操作得到保存,請按正常順序退出系統^_^\n");
do
{
printf ("\n\n\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ 信息安全092班學生信息管理系統 |\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("\t\t\t+ [1]----錄入學生信息 |\n");
printf ("\t\t\t+ [2]----瀏覽學生信息 |\n");
printf ("\t\t\t+ [3]----查詢學生信息 |\n");
printf ("\t\t\t+ [4]----刪除學生信息 |\n");
printf ("\t\t\t+ [5]----修改學生信息 |\n");
printf ("\t\t\t+ [0]----退出系統 |\n");
printf ("\t\t\t+*·*·*·*·*·*·*·*·*·*·*·*·*·*·*|\n");
printf ("\t\t\t--------------------------------------------\n");
printf ("請輸入您的選擇:");
scanf ("%d", &choice);
switch (choice)
{
case 0:
writeData ();
freeAll ();
exit (0);
case 1:
record ();
break;
case 2:
displayAll ();
break;
case 3:
query_by_num ();
break;
case 4:
del ();
break;
case 5:
change ();
break;
default:
printf ("\n無效選項!");
break;
}
}
while (choice != 0);
}
//錄入學生信息
void record ()
{
struct student *p0;
p0 = (struct student *)malloc(LEN);
printf ("請輸入學生的姓名:");
scanf ("%s",p0->name);
printf ("請輸入學生的學號:");
scanf ("%ld",&p0->num);
printf ("請輸入學生的性別:");
scanf ("%s",p0->sex);
printf ("請輸入學生的年齡:");
scanf ("%d",&p0->age);
printf ("請輸入學生的地址:");
scanf ("%s",p0->address);
printf ("請輸入學生的電話:");
scanf ("%lf",&p0->tele_num);
printf ("請輸入學生的愛好:");
scanf ("%s",p0->aihao);
insert (p0);
printf ("該學生的信息為:\n");
printf ("-------------------------------------------------------------------------------\n");
printf ("姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
display (p0);
}
void insert (struct student *stu)
{
struct student *p0, *p1, *p2;
p1 = head;
p0 = stu;
if (head == NULL)
{
head = p0;
p0->next = NULL;
}
else
{
while ((p0->num > p1->num)&&(p1->next != NULL))
{
p2 = p1;
p1 = p1->next;
}
if (p0->num <= p1->num)
{
if (head == p1)
head = p0;
else
p2->next = p0;
p0->next = p1;
}
else
{
p1->next = p0;
p0->next = NULL;
}
}
TOTAL_NUM++;
}
void display (struct student *p)
{
printf ("%s\t%ld\t%d\t%s\t%s\t\t%.0f\t%s\n", p->name, p->num, p->age, p->sex, p->address, p->tele_num, p->aihao);
}
//瀏覽學生信息
void displayAll()
{
struct student *p;
printf("學生總數:%d\n", TOTAL_NUM);
p = head;
if (head != NULL)
{
printf("\n姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
printf("-------------------------------------------------------------------------------\n");
do
{
display(p);
p = p->next;
}
while(p != NULL);
}
printf ("\n");
}
//按學號查詢學生信息
void query_by_num ()
{
int num;
struct student *p1;
printf("請輸入學生的學號:");
scanf("%ld", &num);
if(head==NULL)
{
printf("無學生記錄!\n");
return;
}
p1 = head;
while (num!=p1->num && p1->next!=NULL)
p1 = p1->next;
if (num == p1->num)
{
printf ("姓名\t學號\t\t年齡\t性別\t地址\t\t電話\t\t愛好\n");
printf ("-------------------------------------------------------------------------------\n");
display (p1);
}
else
printf ("沒有該學生記錄,請核對!");
}
//寫入文件
void writeData ()
{
FILE* fp;//文件指針
struct student *p;
fp = fopen("1.txt", "w");
if (!fp)
{
printf("文件打開錯誤!");
return;
}
fprintf(fp,"%d\n", TOTAL_NUM);
for(p = head; p!= NULL; p= p->next)
{
fprintf(fp,"%s\t%ld\t%s\t%d\t%s\t%.0f\t%s\n", p->name, p->num, p->sex, p->age, p->address, p->tele_num, p->aihao);
}
fclose (fp);
}
void freeAll ()
{
struct student *p1, *p2;
p1 = p2=head;
while(p1)
{
p2=p1->next;
free (p1);
p1 = p2;
}
}
//讀取文件
void readData ()
{
FILE* fp;//文件指針
struct student *p1, *p2;
fp = fopen("1.txt", "r");
if (!fp)
{
printf("文件打開錯誤!");
return;
}
fscanf(fp,"%d\n", &TOTAL_NUM);
head = p1 = p2 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
while(!feof(fp))
{
p1 = (struct student *)malloc(LEN);
fscanf(fp,"%s\t%ld\t%s\t%d\t%s\t%lf\t%s\n", p1->name, &p1->num, p1->sex, &p1->age, p1->address, &p1->tele_num, p1->aihao);
p2->next = p1;
p2 = p1;
}
p2->next = NULL;
fclose(fp);
}
//刪除學生信息
void del ()
{
struct student *p1, *p2;
long int num;
if (head == NULL)
{
printf("無學生記錄!\n");
return;
}
printf("請輸入您要刪除的學生的學號:");
scanf("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
{
if(p1 == head)
head = p1->next;
else p2->next = p1->next;
free(p1);
TOTAL_NUM--;
}
else
printf("沒有該學生記錄,請核對!\n");
}
//修改學生信息
void change ()
{
struct student *p1, *p2;
long int num;
if (head == NULL)
{
printf ("無學生記錄!\n");
return;
}
printf ("請輸入您要修改的學生的學號:");
scanf ("%ld", &num);
p1 = head;
while (num != p1->num && p1->next != NULL)
{
p2 = p1;
p1 = p1->next;
}
if(num == p1->num)
devise (p1);
else
printf("沒有該學生記錄,請核對!\n");
}
void devise (struct student *p)
{
int choice;
choice = -1;
do
{
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("| 取消 請按 0 |\n");
printf("+----------------------+\n");
printf("請輸入您的選擇:");
scanf("%d", &choice);
switch (choice)
{
case 0:
return;
case 1:
printf("請輸入新姓名:");
scanf("%s", p->name);
break;
case 2:
printf("請輸入新學號:");
scanf("%d", &p->num);
break;
case 3:
printf("請輸入新性別:");
scanf("%s", p->sex);
break;
case 4:
printf("請輸入新年齡:");
scanf("%s", &p->age);
break;
case 5:
printf("請輸入新地址:");
scanf("%s", p->address);
break;
case 6:
printf("請輸入新電話:");
scanf("%lf", &p->tele_num);
break;
case 7:
printf("請輸入新愛好:");
scanf("%s", p->aihao);
break;
default:
printf("\n無效選項!");
break;
}
}
while(choice != 0);
}
3、學生信息管理系統設計
# include<iostream.h>
# include<string.h>
# include<stdio.h>
# include<stdlib.h>
# include<fstream.h>
//*****定義一個學生原子的的數據結構*****//
struct stuatom
{
char *name;
int id;
char sex;
float math, eng, comp, totll, aver;
void show();
void setup();
};
//*********定義一系列對學生的操作**********//
class student
{
private:
stuatom ob[100];
int stulen;
public:
student();
void input();
void order();
void save();
void Query();
void read();
void add();
void del();
};
//********對學生數據的初始化(類的構造函數)**********//
student::student()
{
//用for循環對全部數組中的數據初始化
for(int i=0;i<100;i++)
{
ob[i].math=ob[i].eng=ob[i].comp =ob[i].totll =ob[i].aver =0;
ob[i].id =0;
ob[i].sex =' ';
ob[i].name =NULL;
}
this->stulen =0;
}
//********輸入學生的數據,並判斷是否在規定數據域內*******//
void stuatom::setup()
{
char n[20]; char s;
int b;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
do {
cout<<" 學號: ";
cin>>b;
if(b>1020||b<1001)
cout<<"Bad data input!!"<<endl<<endl;
}while (b<1001||b>1020);
id=b;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
do{
name=new char[strlen(n)+1];
cout<<" 姓名: ";
cin>>n;
if( strlen(n)>6 || strlen(n)<4 )
cout<<"Bad data input!!"<<endl<<endl;
}while ( strlen(n)>6 && strlen(n)<4 );
strcpy(name,n);
cout<<" 性別(m/f):" ;
cin>>s;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
while (s!='m' && s!='f')
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 性別(m/f):";
cin>>s;
}
sex=s;
float m, e, co;
cout<<" 數學: ";
cin>>m;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
while (m<0 || m>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 數學: ";
cin>>m;
}
math=m;
cout<<" 英語: ";
cin>>e;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
while (e<0 || e>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 英語: ";
cin>>e;
}
eng=e;
cout<<" 計算機: ";
cin>>co;
//如果輸入學好在數據域內,跳出循環並且賦值。
//如果不再數據域內,一直循環到輸入數據符合數據域為止
while (co<0 || co>100)
{
cout<<"Bad data input!!"<<endl<<endl;
cout<<" 計算機: ";
cin>>co;
}
comp=co;
totll=math+eng+comp;
aver=(math+eng+comp)/3;
}
//*******按照規定格式把該學生的數據顯示在屏幕上******//
void stuatom::show()
{
cout.setf(ios::left);
cout.width(6);
cout<<""<<id<<" ";
cout.width(8);
cout<<name;
cout.width(10);
cout<<sex;
cout.width(9);
cout<<math;
cout.width(9);
cout<<eng;
cout.width(11);
cout<<comp;
cout.width(10);
cout<<totll<<aver<<endl;
}
//**************輸入學生的數據***********************//
void student::input()
{
int n;
cout<<endl<<"輸入將要錄入的學生數目: ";
cin>>n;
int j;
//通過循環輸入要求輸入學生個數的學生的數據。
for(j=0; j<n; j++)
{
cout<<" 輸入學生信息 "<<j<<endl;
ob[j].setup();
}
this->stulen=n; //學生個數賦值
//學生數據顯示格式
system("cls");
cout<<endl<<"----------------------------- 學生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學號 姓名 性別 數學 英語 計算機 總分 平均分"<<endl;
//通過循環輸出所有學生數據。
for(j=0; j<n; j++)
{
ob[j].show();
}
cout<<endl;
cout<<" 是否保存? (Y/N): ";
char Y;
cin>>Y;
system("cls");
}
//**************按照一定格式顯示所要查詢學生的信息。**************//
void student::Query()
{
int x , i;
cout<<endl<<" 輸入要查詢學生的學號: ";
cin>>x;
cout<<endl<<" 學號 姓名 性別 數學 英語 計算機 總分 平均分"<<endl;
for(i=0;i<=this->stulen ;i++)
{ if (x==ob[i].id)
{
cout.setf(ios::left);
cout.width(6);
cout<<""<<ob[i].id<<" ";
cout.width(8);
cout<<ob[i].name;
cout.width(10);
cout<<ob[i].sex;
cout.width(9);
cout<<ob[i].math;
cout.width(9);
cout<<ob[i].eng;
cout.width(11);
cout<<ob[i].comp;
cout.width(10);
cout<<ob[i].totll<<ob[i].aver<<endl;
}
}
getchar();
}
//*******************保存學生數據**************************//
void student::save()
{
int i;
ofstream outfile;
outfile.open("list.txt",ios::trunc);
if(!outfile)
{
cout<<"Cannot open output file!\n,";
}
//通過循環把所有的學生數據保存在list.txt里邊。
for(i=0; i<this->stulen; i++)
{
outfile<<ob[i].id<<" "<<ob[i].name<<" "<<ob[i].sex<<" "<<
ob[i].math<<" "<<ob[i].eng<<" "<<ob[i].comp<<" "<<ob[i].totll<<" "<<ob[i].aver<<endl;
}
outfile.close();
}
//*************顯示所有學生數據*********************//
void student::read()
{
int i;
system("cls");
cout<<endl<<"----------------------------- 學生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學號 姓名 性別 數學 英語 計算機 總分 平均分"<<endl;
for(i=0; i<this->stulen; i++)
{
ob[i].show();
}
getchar();
}
//*******************一個學生的數據****************//
void student::add()
{
int i, d=this->stulen ;
cout<<"輸入要添加學生的信息:"<<endl;
ob[d].setup();
cout<<endl<<"----------------------------- 學生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學號 姓名 性別 數學 英語 計算機 總分 平均分"<<endl;
for(i=0; i<=d; i++)
{
ob[i].show();
}
ofstream fout("list.txt",ios::app);
if(!fout)
{
cout<<"Cannot open output file!\n,";
}
//把添加的學生數據添加到list.txt里邊去。
fout<<ob[d].id<<" "<<ob[d].name<<" "<<ob[d].sex<<" "<<
ob[d].math<<" "<<ob[d].eng<<" "<<ob[d].comp<<" "<<ob[d].totll<<" "<<ob[d].aver<<endl;
fout.close();
getchar();
}
//*********************刪除指定名字學生的數據*******************//
void student::del()
{
int i,p; char x[8];
cout<<" 輸入要刪除學生名字:"<<endl;
cin>>x;
//通過for循環查找要刪除學生的姓名
for(i=0; i<stulen; i++)
{
if(strcmp(ob[i].name,x)==0)
{
p=i;
cout<<endl<<"學號 姓名 性別 數學 英語 計算機 總成績 平均成績"<<endl;
cout<<ob[i].id<<" "<<ob[i].name<<" "<<ob[i].sex<<" "<<ob[i].math<<" "<<ob[i].eng<<" "<<ob[i].comp<<" "<<ob[i].totll<<" "<<ob[i].aver<<endl;
break;
}
else
continue;
}
cout<<endl<<"----------------------------- 學生信息表 ------------------------------------"<<endl;
cout<<endl<<" 學號 姓名 性別 數學 英語 計算機 總分 平均分"<<endl;
//刪除了之後,應該把後面的數據往前移,把要刪除的數據覆蓋,並且學生長度減1
stulen--;
for(i;i<stulen;i++)
{
ob[i]=ob[i+1];
}
this->read ();
cout<<" 刪除成功!"<<endl;
getchar();
}
//***********把學生成績排序******************//
void student::order()
{
int k,j;
float t; char n[20];
//排序演算法。
for(j = 0; j<=(2-1); j++)
{
for(k=1; k<=(2-j); k++)
{
if(ob[k].totll < ob[k + 1].totll)
{
t = ob[k].totll;
ob[k].totll = ob[k+1].totll;
ob[k+1].totll = t;
strcpy(n, ob[k].name);
strcpy(ob[k].name, ob[k+1].name);
strcpy(ob[k+1].name, n);
}
cout<<" 成績排名:"<<endl;
cout<<" 姓名 總成績 名次"<<endl;
for(k=0; k<=stulen; k++)
{
cout<<" ";
cout.setf(ios::left);
cout.width(9);
cout<<ob[k].name;
cout.width(9);
cout<<ob[k].totll<<k<<endl;
}
getchar();
}
}
}
//********************選擇菜單。*****************//
void menu()
{
cout<<"\n\n";
cout<<"------------------ 學生成績系統 -----------------"<<endl<<endl;
cout<<"\t\t1.錄入與保存學生信息.\n";
cout<<"\t\t2.讀取學生信息.\n";
cout<<"\t\t3.刪除學生信息.\n";
cout<<"\t\t4.追加學生信息.\n";
cout<<"\t\t5.查詢學生信息.\n";
cout<<"\t\t6.顯示成績名次.\n";
cout<<"\t\t7.退出系統......\n\n\n";
cout<<"\t\t請選擇功能項: ";
}
//---------------------------------------------------------------------------------------
void main()
{
student a;
while(1)
{
int SEL;
system("cls");
menu();
cin>>SEL;
switch(SEL)
{
case 1:
system("cls"); a.input();a.save();break;
case 2:
system("cls"); a.read(); break;
case 3:
system("cls"); a.del(); break;
case 4:
system("cls"); a.add();break;
case 5:
system("cls"); a.Query();break;
case 6:
system("cls"); a.order();break;
case 7:
cout<<endl<<" 按任意鍵退出.... "<<endl;
getchar();
exit(0);
default:
cout<<"Bad input!!\n";
break;
}
}
}
4、學生信息管理系統設計?
現在上學學生都有學籍,登錄上去一目瞭然,信息化了,只要把信息輸入進去,所有的內容都看的見,現在真是太好了
5、學生信息管理系統設計(C語言)
寫了半天,看看吧。
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student{
int id;
char name[10];
int age;
char sex[10];
char birthady[20];
int tel;
char nativeplace[50];
}st[50];
int i=0;
void shuru() {
char a;
do{
printf("\n請輸入學號:");
scanf("%d",&st[i].id);
fflush(stdin);
printf("\n請輸入姓名:");
gets(st[i].name);
printf("\n") ;
printf("請輸入年齡:");
scanf("%d",&st[i].age);
fflush(stdin);
printf("\n請輸入姓別:");
gets(st[i].sex);
fflush(stdin);
printf("\n請輸入生日:");
gets(st[i].birthady);
printf("\n請輸入電話:");
scanf("%d",&st[i].tel);
fflush(stdin);
printf("\n請輸入籍貫:");
gets(st[i].nativeplace);
printf("\n是否繼續輸入另外一個學生信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void xianshi()
{
int j;
printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");
for(j=0;j<i;j++)
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace);
}
void paixu() //按年齡從大到小排序函數
{
int j,k;
int temp;
for(j=0;j<i;j++)
{
for(k=0;k<i-1-j;k++)
{
if(st[k].age<st[k+1].age)
{
temp=st[k].age;
st[k].age=st[k+1].age;
st[k+1].age=temp;
}
}
}
xianshi(); //排序後輸出
}
void chazhao()
{
int m;
char name[20],b;
do
{
printf("\n請輸入想查找的學生姓名:");
fflush(stdin);
gets(name);
for(m=0;m<i;m++)
{
if(strcmp(name,st[m].name)==0)
{
printf("\n\t您查找的學生在第%d個位置找到了!!!\n",m+1);
break;
}
}
if(m>=20)
printf("\n\t沒有找到這個學生!!!\n");
else
{
printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace);
}
printf("\n是否查找另一個學生的信息?(y/n)");
fflush(stdin);
b=getchar();
}while(b=='y');
}
void shanchu()
{
char name[20],c;
int a,b;
do
{
printf("\n請輸入要刪除的學生姓名:\n");
fflush(stdin);
gets(name);
for(a=0;a<i;a++)
{
if(strcmp(name,st[a].name)==0)
break;
}
for(b=a;b<i;b++)
st[b]=st[b+1];
if(a>i)
printf("\t沒有找到這個學生!!!\n");
else
{
i--;
xianshi();
}
printf("\n是否繼續刪除另一個學生信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}
void charu()
{
shuru();
paixu();
}
void main() //主函數
{
int change;
do{
system("cls");
printf("============================學生信息管理系統===================================\n");
printf("\t\t一: 輸入學生信息\n");
printf("\t\t二: 顯示學生信息\n");
printf("\t\t三: 查找學生信息\n");
printf("\t\t四: 刪除學生信息\n");
printf("\t\t五: 插入學生信息\n");
printf("\t\t六: 退出程序\n");
fflush(stdin);
printf("\t\t請輸入功能選項:");
scanf("%d",&change);
switch(change)
{
case 1:
shuru(); break;
case 2:
xianshi(); break;
case 3:
chazhao(); break;
case 4:
shanchu(); break;
case 5:
charu(); break;
case 6:
break;
}
getch();
}while(change!=6);
}
6、設計一個學生信息管理系統
#include #include #include #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; }
7、學生信息管理系統代碼設計怎麼寫
好多語言都可以寫學生信息管理系統的,這里以C語言為例,只供參考:
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
typedef struct student {
unsigned m_id;
string m_name;
unsigned m_age;
string m_sex;
string m_address;
string m_contact;
string m_dormitory;
struct student *m_next;
}student;
class CStudent {
private :
student *head;
public :
CStudent() {
head = new student;
head->m_id = 0;
head->m_name = "noname";
head->m_next = NULL;
}
~CStudent() {
student *p = head,*q;
while(p) {
q = p;
p = q->m_next;
delete q;
}
}
student readdata(int model); // model = 1:不讀取學號,2:不讀取姓名,其他,讀取所有信息
void entering();
bool insert(const student &astu);
student *findid(unsigned id) const;
student *findname(const string &name) const;
student *findsex(const string &sex) const;
student *finddormitory(const string &dormitory) const;
unsigned boys() const;
unsigned girls() const;
unsigned headcount() const;
bool eraseid();
bool erasename();
bool modifyid();
bool modifyname();
void Show() const;
void query() const;
void friend statistics(const CStudent &aclss);
void friend erase(CStudent &aclss);
void friend modify(CStudent &aclss);
};
string readstring() {
string str;
while(cin.get() != '\n');
cin >> str;
return str;
}
student CStudent::readdata(int model) {
student tmp;
if(model != 1) { cout << "學 號: "; cin >> tmp.m_id; }
if(model != 2) { cout << "姓 名: "; tmp.m_name = readstring(); }
cin >> tmp.m_age;
cout << "性 別: ";
tmp.m_sex = readstring();
cout << "住 址: ";
tmp.m_address = readstring();
cout << "聯系方式: ";
tmp.m_contact =readstring();
cout << "寢 室: ";
tmp.m_dormitory = readstring();
return tmp;
}
void CStudent::entering() {
student tmp;
cout << "學號(0 to return): ";
cin >> tmp.m_id;
while(tmp.m_id) {
if(findid(tmp.m_id) == NULL) {
cout << "姓 名: ";
tmp.m_name = readstring();
cout << "年 齡: ";
cin >> tmp.m_age;
cout << "性 別: ";
tmp.m_sex = readstring();
cout << "住 址: ";
tmp.m_address = readstring();
cout << "聯系方式: ";
tmp.m_contact = readstring();
cout << "寢 室: ";
tmp.m_dormitory = readstring();
insert(tmp);
}
else cout << "重復的學號:" << tmp.m_id << endl;
cout << "學號(0 to return): ";
cin >> tmp.m_id;
}
}
student *CStudent::findid(unsigned id) const {
student *p;
for(p = head; p->m_next; p = p->m_next)
if(p->m_next->m_id == id) return p;
return NULL;
}
student *CStudent::findname(const string &name) const {
student *p;
for(p = head; p->m_next; p = p->m_next)
if(p->m_next->m_name == name) return p;
return NULL;
}
student *CStudent::findsex(const string &sex) const {
student *p;
for(p = head; p->m_next; p = p->m_next)
if(p->m_next->m_sex == sex) return p;
return NULL;
}
student *CStudent::finddormitory(const string &dormitory) const {
student *p;
for(p = head; p->m_next; p = p->m_next)
if(p->m_next->m_dormitory == dormitory) return p;
return NULL;
}
bool CStudent::insert(const student &astu) {
student *newnode,*p = head;
if(p->m_next == NULL) {
p->m_next = new student(astu);
p->m_next->m_next = NULL;
return true;
}
while(p->m_next) {
if(p->m_next->m_id == astu.m_id) {
cout << "重復的學號,插入失敗!\n";
return false;
}
if(p->m_next->m_id > astu.m_id) {
newnode = new student(astu);
newnode->m_next = p->m_next;
p->m_next = newnode;
return true;
}
p = p->m_next;
}
p->m_next = new student(astu);
p->m_next->m_next = NULL;
return true;
}
unsigned CStudent::boys() const {
unsigned cnt = 0;
student *p;
for(p = head->m_next; p; p = p->m_next)
if(p->m_sex == "男") ++cnt;
return cnt;
}
unsigned CStudent::girls() const {
unsigned cnt = 0;
student *p;
for(p = head->m_next; p; p = p->m_next)
if(p->m_sex == "女") ++cnt;
return cnt;
}
unsigned CStudent::headcount() const {
unsigned cnt = 0;
student *p;
for(p = head->m_next; p; p = p->m_next,++cnt);
return cnt;
}
bool CStudent::eraseid() {
student *q,*p;
unsigned id;
cout << "輸入要刪除的學號:";
cin >> id;
p = findid(id);
if(p == NULL) {
cout << "沒有找到學號是\"" << id << "\"的學生,刪除失敗!\n";
return false;
}
q = p->m_next;
p->m_next = q->m_next;
delete q;
return true;
}
bool CStudent::erasename() {
student *q,*p;
string name;
cout << "輸入要刪除人的姓名:";
name = readstring();
p = findname(name);
if(p == NULL) {
cout << "沒有找到姓名是\"" << name << "\"的學生,刪除失敗!\n";
return false;
}
q = p->m_next;
p->m_next = q->m_next;
delete q;
return true;
}
bool CStudent::modifyid() {
student tmp,*p;
unsigned id;
cout << "輸入要修改的學號:";
cin >> id;
p = findid(id);
if(p == NULL) {
cout << "沒有找到學號是\"" << id << "\"的學生,修改失敗!\n";
return false;
}
tmp = readdata(1);
tmp.m_id = id;
*p = tmp;
return true;
}
bool CStudent::modifyname() {
student *p,tmp;
string name;
cout << "輸入要修改人的姓名:";
name = readstring();
p = findname(name);
if(p == NULL) {
cout << "沒有找到姓名是\"" << name << "\"的學生,修改失敗!\n";
return false;
}
tmp = readdata(2);
tmp.m_name = name;
*p = tmp;
return true;
}
int menu() {
int choice;
do {
system("cls");
cout << "\t****************************\n";
cout << "\t* 學生基本信息管理系統 *\n";
cout << "\t*==========================*\n";
cout << "\t* 1、錄入學生信息 *\n";
cout << "\t* 2、顯示學生信息 *\n";
cout << "\t* 3、查詢學生信息 *\n";
cout << "\t* 4、添加學生信息 *\n";
cout << "\t* 5、統計學生信息 *\n";
cout << "\t* 6、刪除學生信息 *\n";
cout << "\t* 7、修改學生信息 *\n";
cout << "\t* 0、退出管理系統 *\n";
cout << "\t****************************\n";
cout << "\n\t請選擇:";
cin >> choice;
}while(choice < 0 || choice > 7);
return choice;
}
void show(student *p) {
cout << p->m_id << " " << p->m_name << " " << p->m_age << " ";
cout << p->m_sex << " " << p->m_address << " ";
cout << p->m_contact << " " << p->m_dormitory << endl;
}
void CStudent::Show() const {
student *p;
cout << "----------------------------------------------------------\n";
for(p = head->m_next; p; p = p->m_next) show(p);
cout << "----------------------------------------------------------\n";
system("pause");
}
void CStudent::query() const {
int select;
unsigned id;
string name;
student *p;
cout << "1、按學號查詢\n2、按姓名查詢\n0、返回\n";
cin >> select;
switch(select) {
case 1 : cout << "請輸入學號:"; cin >> id;
if(p = findid(id)) show(p->m_next);
break;
case 2 : cout << "請輸入姓名:"; name = readstring();
if(p = findname(name)) show(p->m_next);
break;
case 0 : return;
default : cout << "選擇錯誤。\n";
}
system("pause");
}
void statistics(const CStudent &a) {
unsigned total = a.headcount();
unsigned boys = a.boys();
unsigned girls = a.girls();
cout << "學生總數:" << total << "人。\n";
cout << "其中,男生:" << boys << "名。";
cout << "女生:" << girls << "名。\n";
system("pause");
}
void erase(CStudent &a) {
int select;
unsigned id;
string name;
student *p,*q;
cout << "1、按學號刪除\n2、按姓名刪除\n0、返回\n";
cin >> select;
switch(select) {
case 1 : cout << "請輸入學號:"; cin >> id;
if(p = a.findid(id)) {
q = p->m_next;
p->m_next = q->m_next;
delete q;
cout << "成功刪除 " << id << " 的信息。\n";
}
break;
case 2 : cout << "請輸入姓名:"; name = readstring();
if(p = a.findname(name)) {
q = p->m_next;
p->m_next = q->m_next;
delete q;
cout << "成功刪除 " << name << " 的信息。\n";
}
break;
case 0 : return;
default : cout << "選擇錯誤。\n";
}
system("pause");
}
void modify(CStudent &a) {
int select;
cout << "1、按學號修改\n2、按姓名修改\n0、返回\n";
cin >> select;
switch(select) {
case 1 : if(a.modifyid()) cout << "修改成功。\n"; break;
case 2 : if(a.modifyname()) cout << "修改成功。\n"; break;
case 0 : return;
default : cout << "選擇錯誤。\n";
}
system("pause");
}
int main() {
CStudent a;
int an;
do {
an = menu();
switch(an) {
case 1 : a.entering(); break;
case 2 : a.Show(); break;
case 3 : a.query(); break;
case 4 : a.entering(); break;
case 5 : statistics(a); break;
case 6 : erase(a); break;
case 7 : modify(a); break;
case 0 : break;
default : cout << "選擇錯誤。\n"; break;
}
}while(an);
return 0;
}
8、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();
9、C語言 學生信息管理系統設計
呵呵~~
我也找了很久哦~~
第一種:
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>
struct student{
int id;
char name[10];
int age;
char sex[10];
char birthady[20];
int tel;
char nativeplace[50];
}st[50];
int i=0;
void shuru() {
char a;
do{
printf("\n請輸入學號:");
scanf("%d",&st[i].id);
fflush(stdin);
printf("\n請輸入姓名:");
gets(st[i].name);
printf("\n") ;
printf("請輸入年齡:");
scanf("%d",&st[i].age);
fflush(stdin);
printf("\n請輸入姓別:");
gets(st[i].sex);
fflush(stdin);
printf("\n請輸入生日:");
gets(st[i].birthady);
printf("\n請輸入電話:");
scanf("%d",&st[i].tel);
fflush(stdin);
printf("\n請輸入籍貫:");
gets(st[i].nativeplace);
printf("\n是否繼續輸入另外一個學生信息?(y/n)");
fflush(stdin);
a=getchar();
i++;
}while(a=='y' && i<=50);
}
void xianshi()
{
int j;
printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");
for(j=0;j<i;j++)
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[j].id,st[j].name,st[j].age,st[j].sex,st[j].birthady,st[j].tel,st[j].nativeplace);
}
void paixu() //按年齡從大到小排序函數
{
int j,k;
int temp;
for(j=0;j<i;j++)
{
for(k=0;k<i-1-j;k++)
{
if(st[k].age<st[k+1].age)
{
temp=st[k].age;
st[k].age=st[k+1].age;
st[k+1].age=temp;
}
}
}
xianshi(); //排序後輸出
}
void chazhao()
{
int m;
char name[20],b;
do
{
printf("\n請輸入想查找的學生姓名:");
fflush(stdin);
gets(name);
for(m=0;m<i;m++)
{
if(strcmp(name,st[m].name)==0)
{
printf("\n\t您查找的學生在第%d個位置找到了!!!\n",m+1);
break;
}
}
if(m>=20)
printf("\n\t沒有找到這個學生!!!\n");
else
{
printf("\t學號\t姓名\t年齡\t性別\t生日\t\t電話\t籍貫\n");
printf("\t%d\t%s\t%d\t%s\t%s\t%d\t%s\n",
st[m].id,st[m].name,st[m].age,st[m].sex,st[m].birthady,st[m].tel,st[m].nativeplace);
}
printf("\n是否查找另一個學生的信息?(y/n)");
fflush(stdin);
b=getchar();
}while(b=='y');
}
void shanchu()
{
char name[20],c;
int a,b;
do
{
printf("\n請輸入要刪除的學生姓名:\n");
fflush(stdin);
gets(name);
for(a=0;a<i;a++)
{
if(strcmp(name,st[a].name)==0)
break;
}
for(b=a;b<i;b++)
st[b]=st[b+1];
if(a>i)
printf("\t沒有找到這個學生!!!\n");
else
{
i--;
xianshi();
}
printf("\n是否繼續刪除另一個學生信息?(y/n) ");
fflush(stdin);
c=getchar();
}while(c=='y');
}
void charu()
{
shuru();
paixu();
}
void main() //主函數
{
int change;
do{
system("cls");
printf("============================學生信息管理系統===================================\n");
printf("\t\t一: 輸入學生信息\n");
printf("\t\t二: 顯示學生信息\n");
printf("\t\t三: 查找學生信息\n");
printf("\t\t四: 刪除學生信息\n");
printf("\t\t五: 插入學生信息\n");
printf("\t\t六: 退出程序\n");
fflush(stdin);
printf("\t\t請輸入功能選項:");
scanf("%d",&change);
switch(change)
{
case 1:
shuru(); break;
case 2:
xianshi(); break;
case 3:
chazhao(); break;
case 4:
shanchu(); break;
case 5:
charu(); break;
case 6:
break;
}
getch();
}while(change!=6);
}
第二種
#include<stdio.h>
#include<conio.h>
#include<string.h>
typedef struct STUDENT
{
char studentNumber[10];/*學生學號*/
char studentName[20];/*學生姓名*/
char studentSEX[10];/*學生性別*/
char className[20];/*班級名稱*/
float mark1;/*第1門成績*/
float mark2;/*第2門成績*/
float mark3;/*第3門成績*/
float mark4;/*第4門成績*/
float mark5;/*第5門成績*/
struct STUDENT *next;
}STUDENT;
STUDENT *headLink;/*鏈表表頭指針*/
/*以下是函數聲明*/
void ReadInfoFormFile(void);
void DesplayMenu(void);
void CreateHeadLink(void);
STUDENT *MallocNode(void);
void GetInformation(STUDENT *t);
void OutputInformation(void);
void DesplayInfoBystudentName(void);
void DesplayInfoBystudentNumber(void);
void DesplayOneNode(STUDENT *t);
void InsertOneNode(STUDENT *t);
void DeleteNodeBystudentNumber(void);
void ChangeMarkByName(void);
void ChangeMarkByNumber(void);
void SaveLinkToFile(void);
void DesplayMarkSegment(void);
void CompositorByTotalMark(void);
int choose;/*用於接受用戶的選擇*/
/*主函數*/
void main()
{
CreateHeadLink();
ReadInfoFormFile();
DesplayMenu();
}
/************************************
函數功能:從文件中讀學生信息到鏈表中
************************************/
void ReadInfoFormFile(void)
{
FILE *fp;
STUDENT *p;
fp=fopen("student.txt","r");
if(!fp)
{
printf("文件不存在\n");
return;
}
p=MallocNode();
while(fscanf(fp,"%s%s%s%s%f%f%f",p->studentNumber,p->studentSEX,p->studentName,p->className,&(p->mark1),&(p->mark2),&(p->mark3),&(p->mark4),&(p->mark5))>0)
{
InsertOneNode(p);
p=MallocNode();
}
fclose(fp);
}
/************************************
函數功能:顯示菜單,根據用戶的輸入
完成相應的功能
************************************/
void DesplayMenu(void)
{
STUDENT *p;
printf("-------請選擇相應功能------------\n\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("| 11 退出 |\n\n");
scanf("%d",&choose);/*取得用戶的選擇*/
switch(choose)
{
case 1:
OutputInformation();/*顯示所有學生的信息*/
break;
case 2:
DesplayInfoBystudentName();
break;
case 3:
DesplayInfoBystudentNumber();/*根據用戶輸入的學號顯示該學生的信息*/
break;
case 4:
p=MallocNode();/*先申請一個新結點*/
GetInformation(p);/*要求用戶輸入信息到新結點中*/
InsertOneNode(p);/*將新結點加到鏈表中*/
break;
case 5:
DeleteNodeBystudentNumber();/*根據用戶輸入的學號刪除該學生*/
break;
case 6:
ChangeMarkByName();/*根據用戶輸入的姓名修改學生成績*/
break;
case 7:
ChangeMarkByNumber();/*根據用戶輸入的學號修改學生成績*/
break;
case 8:
SaveLinkToFile();/*保存數據*/
break;
case 9:
DesplayMarkSegment();/*顯示各分數段的學生成績*/
break;
case 10:
CompositorByTotalMark();
break;
case 11:
SaveLinkToFile();/*保存數據後再退出*/
free(headLink);
exit(1);
break;
default:
break;
}
DesplayMenu();/*遞歸調用*/
}
/************************************
函數功能:建立鏈表表頭
************************************/
void CreateHeadLink(void)
{
STUDENT *p;
p=(STUDENT*)malloc(sizeof(STUDENT));
headLink=p;
p->next=NULL;
}
/************************************
函數功能:申請一個新結點,並將其初始化
************************************/
STUDENT *MallocNode(void)
{
STUDENT *p;
int i;
p=(STUDENT*)malloc(sizeof(STUDENT));
if(p==NULL)
return NULL;
for(i=0;i<10;i++)
p->studentNumber[i]='\0';
for(i=0;i<20;i++)
p->studentName[i]='\0';
for(i=0;i<10;i++)
p->studentSEX[i]='\0';
for(i=0;i<20;i++)
p->className[i]='\0';
p->mark1=0.0;
p->mark2=0.0;
p->mark3=0.0;
p->mark4=0.0;
p->mark5=0.0;
p->next=NULL;
return p;
}
/************************************
函數功能:取得用戶輸入的學生信息
************************************/
void GetInformation(STUDENT *t)
{
printf("請輸入學生學號:\n");
scanf("%s",t->studentNumber);
printf("請輸入學生姓名:\n");
scanf("%s",t->studentName);
printf("請輸入學生性別:\n");
scanf("%s",t->studentSEX);
printf("請輸入該生所在班級:\n");
scanf("%s",t->className);
printf("請輸入第1門成績:\n");
scanf("%f",&(t->mark1));
printf("請輸入第2門成績:\n");
scanf("%f",&(t->mark2));
printf("請輸入第3門成績:\n");
scanf("%f",&(t->mark3));
printf("請輸入第4門成績:\n");
scanf("%f",&(t->mark4));
printf("請輸入第5門成績:\n");
scanf("%f",&(t->mark5));
}
/************************************
函數功能:在鏈表的結尾處增加一個結點
************************************/
void InsertOneNode(STUDENT *t)
{
STUDENT *p;
p=headLink;
while(p->next)
{
p=p->next;
}
p->next=t;
}
/************************************
函數功能:根據用戶輸入的學生姓名顯示該學生的信息
************************************/
void DesplayInfoBystudentName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
p=headLink->next;
printf("請輸入學生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據用戶輸入的學號顯示該學生的信息
************************************/
void DesplayInfoBystudentNumber(void)
{
STUDENT *p;
char studentNumber[10];
char flag=0;
p=headLink->next;
printf("請輸入學生學號:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");
DesplayOneNode(p);
flag=1;
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:輸出一個結點的信息
************************************/
void DesplayOneNode(STUDENT *t)
{
printf("%s\t",t->studentNumber);
printf("%s\t",t->studentName);
printf("%s\t",t->studentSEX);
printf("%s\t",t->className);
printf("%.2f\t",t->mark1);
printf("%.2f\t",t->mark2);
printf("%.2f\t",t->mark3);
printf("%.2f\t",t->mark4);
printf("%.2f\t",t->mark5);
printf("%.2f\t",t->mark1+t->mark2+t->mark3+t->mark4+t->mark5);
printf("%.2f\t\n",(t->mark1+t->mark2+t->mark3+t->mark4+t->mark5)/5);
}
/************************************
函數功能:根據用戶輸入的學號刪除該學生
************************************/
void DeleteNodeBystudentNumber(void)
{
char studentNumber[10];
STUDENT *p,*q;
char flag=0;
printf("請輸入要刪除的學生學號:");
scanf("%s",studentNumber);
p=headLink;
q=headLink->next;
while(q)
{
if(strcmp(q->studentNumber,studentNumber)==0)
{
p->next=q->next;
free(q);
flag=1;
break;
}
p=p->next;
q=q->next;
}
if(!flag)
{
printf("不存在該學號的學生\n");
return;
}
printf("成功刪除\n");
}
/************************************
函數功能:顯示所有學生的信息
************************************/
void OutputInformation(void)
{
STUDENT *p;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");
while(p)
{
DesplayOneNode(p);
p=p->next;
}
}
/************************************
函數功能:根據輸入的姓名修改成績
************************************/
void ChangeMarkByName(void)
{
STUDENT *p;
char studentName[20];
char flag=0;
float mark1,mark2,mark3,mark4,mark5;
p=headLink->next;
printf("請輸入學生姓名:\n");
scanf("%s",studentName);
while(p)
{
if(strcmp(p->studentName,studentName)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
printf("請輸入新的第4門成績:\n");
scanf("%f",&mark4);
printf("請輸入新的第5門成績:\n");
scanf("%f",&mark5);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
p->mark4=mark4;
p->mark5=mark5;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在姓名為 %s 的學生\n",studentName);
}
/************************************
函數功能:根據輸入的學號修改成績
************************************/
void ChangeMarkByNumber(void)
{
STUDENT *p;
char studentNumber[20];
char flag=0;
float mark1,mark2,mark3,mark4,mark5;
p=headLink->next;
printf("請輸入學生學號:\n");
scanf("%s",studentNumber);
while(p)
{
if(strcmp(p->studentNumber,studentNumber)==0)
{
printf("請輸入新的第1門成績:\n");
scanf("%f",&mark1);
printf("請輸入新的第2門成績:\n");
scanf("%f",&mark2);
printf("請輸入新的第3門成績:\n");
scanf("%f",&mark3);
printf("請輸入新的第4門成績:\n");
scanf("%f",&mark4);
printf("請輸入新的第5門成績:\n");
scanf("%f",&mark5);
p->mark1=mark1;
p->mark2=mark2;
p->mark3=mark3;
p->mark4=mark4;
p->mark5=mark5;
flag=1;
printf("修改成功\n");
break;
}
p=p->next;
}
if(!flag)
printf("對不起,不存在學號為 %s 的學生\n",studentNumber);
}
/************************************
函數功能:保存鏈表數據到文件中
************************************/
void SaveLinkToFile(void)
{
STUDENT *p;
FILE *fp;
p=headLink->next;
if(p==NULL)
{
printf("現在沒有學生信息,請先輸入學生信息\n\n");
return;
}
fp=fopen("student.txt","w+");
if(!fp)
{
printf("文件不存在\n");
return;
}
while(p)
{
fprintf(fp,"%s %s %s %s %f %f %f %f %f\n",p->studentNumber,p->studentName,p->studentSEX,p->className,p->mark1,p->mark2,p->mark3,p->mark4,p->mark5);
p=p->next;
}
fclose(fp);
}
/************************************
函數功能:顯示優秀和不及格學生成績
************************************/
void DesplayMarkSegment(void)
{
STUDENT *p;
int count=0;
p=headLink->next;
printf("60分以下(不及格)的學生成績如下:\n");
printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");
while(p)
{
if((6>((int)(p->mark1/10)))||(6>((int)(p->mark2/10)))||(6>((int)(p->mark3/10)))||(6>((int)(p->mark4/10)))||(6>((int)(p->mark5/10))))/*只要有一科不及格就認為該生不及格*/
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("不及格的學生一共有%d人\n",count);
p=headLink->next;
printf("成績優秀的學生成績如下:\n");
printf("學號\t姓名\t性別\t班級\t成績1\t成績2\t成績3\t成績4\t成績5\t總成績\t平均成績\n\n");
count=0;
while(p)
{
if((8<=((int)(p->mark1/10)))&&(8<=((int)(p->mark2/10)))&&(8<=((int)(p->mark3/10)))&&(8<=((int)(p->mark4/10)))&&(8<=((int)(p->mark5/10))))
{
count++;
DesplayOneNode(p);
}
p=p->next;
}
printf("成績優秀的學生一共有%d人\n",count);
}
/************************************
函數功能:按總成績排序
************************************/
void CompositorByTotalMark(void)
{
STUDENT exchange,*r,*p,*q;
r=headLink->next;
if(r==NULL)
{
printf("現在還沒學生信息,請先輸入學生信息\n");
return;
}
while(r)/*兩層while循環實現排序*/
{
p=r;
q=r->next;
while(q)
{
if((q->mark1+q->mark2+q->mark3+q->mark4+q->mark5)>(p->mark1+p->mark2+p->mark3+p->mark4+p->mark5))
{
strcpy(exchange.studentNumber,q->studentNumber);/*先復制q結點信息到exchange*/
strcpy(exchange.studentName,q->studentName);
strcpy(exchange.className,q->className);
exchange.mark1=q->mark1;
exchange.mark2=q->mark2;
exchange.mark3=q->mark3;
exchange.mark4=q->mark4;
exchange.mark5=q->mark5;
strcpy(q->studentNumber,p->studentNumber);/*再復制p結點信息到q*/
strcpy(q->studentName,p->studentName);
strcpy(q->studentSEX,p->studentSEX);
strcpy(q->className,p->className);
q->mark1=p->mark1;
q->mark2=p->mark2;
q->mark3=p->mark3;
q->mark4=p->mark4;
q->mark5=p->mark5;
strcpy(p->studentNumber,exchange.studentNumber);/*最後復制exchange結點信息到p*/
strcpy(p->studentName,exchange.studentName);
strcpy(p->className,exchange.className);
p->mark1=exchange.mark1;
p->mark2=exchange.mark2;
p->mark3=exchange.mark3;
p->mark4=exchange.mark4;
p->mark5=exchange.mark5;
}
q=q->next;
}
r=r->next;
}
OutputInformation();
}
我比較傾向於第二種,因為是自己調試的,呵呵~~
你只要把"成績"改成你需要的其他信息就OK了~~