學生管理系統(簡易版)

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define Length sizeof(struct student) //用來開闢空間
int n=0;
struct student
{
// char class_0[20]; //班級
char num[10]; //學號
char name[20]; //姓名
float c_prog; //c語言程序設計
float eng; //大學英語
float math; //高等數學
float sum; //總成績
int order; //名次
struct student *next;
}*head,*p,*p1,*p2; //head表示開頭 p表示不一樣位置的數據函數

float Statistic(struct student *p)
{
p->sum =p->c_prog +p->eng +p->math ;
return p->sum ;
}設計


void add() //添加
{
p1=(struct student *)malloc(Length); //開闢存儲空間
if(n==0) //判斷鏈表開頭
head=p1; //n=0表明輸入的是第一個數據 //p2的結尾所指向的地址是p1
else p2->next=p1; //n!=0 就它們鏈接起來
system("cls");
printf("\t請輸入學生學號:");
scanf("%s",&p1->num );
printf("\t請輸入學生姓名:");
scanf("%s",&p1->name );
//printf("\t請輸入學生班級:");
//scanf("%s",&pl->class_0 );
printf("\n");
printf("\t請輸入C程序成績:");
scanf("%f",&p1->c_prog );
printf("\t請輸入英語成績:");
scanf("%f",&p1->eng );
printf("\t請輸入數學成績:");
scanf("%f",&p1->math );
Statistic(p1);
p2=p1; //p2指向p1所在的地址
p2->next=NULL; //鏈表結束標誌
n+=1; //n判斷是否是第一個數據
system("pause");
system("cls");
}
void print()
{
if(n!=0)
{
p=head; //p先指向開頭
system("cls");
printf("|\t學號\t|\t姓名\t|\tC語言\t|\t英語\t|\t數學\t|\t總分\t|\t排名\t|\n");
do
{
printf("|\t%s\t|\t%s\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%d\t|\n",p->num,p->name,p->c_prog,p->eng,p->math,p->sum,p->order);
p=p->next; //p打印結束 把p指向next以判斷下一個區域有沒有內容
}while(p!=NULL);//只要p指向的內存區域有數據 就打印內容
}
else
printf("******您尚未添加數據喲!\n");
system("pause");
system("cls");
}
void find() //查找
{
void find1();
void find2();
if(n!=0)
{
int a;
system("cls");
printf("1.按姓名查找\n2.按學號查詢\n");
scanf("%d",&a);
switch(a)
{
case 1:
find1();
break;
case 2:
find2();
break;
}
}
else
{printf("******您尚未添加數據喲!\n");system("pause");}
}
void Delete()
{
if(n!=0)
{
struct student *f,*l; //定義新的指針 f使用來指向要刪除的數據用來釋放內存!
char a[20];
printf("請輸入要刪除的姓名:");
scanf("%s",&a);
p=head;
if(strcmp(head->name,a)==0)
{f=head;head=head->next;free(f);}
else
{
do
{
if(strcmp(p->name,a)==0)
{f=p;l->next=p->next;free(f);break;}
l=p; //不知足if表示這不是要刪除的那一個節點,l暫時指向p 以後p再指向下一個節點,若是這個是要刪除的節點那麼l指向這個節點的next的地址
p=p->next;
}while(p!=NULL);
}
}
else
printf("******您尚未添加數據喲!\n");
printf("數據已經被刪除\n");
system("pause"); //等待命令
system("cls");
}
void amend()
{
if(n!=0)
{
int c;
char a[20];
printf("請輸入要修改的姓名:");
scanf("%s",&a);
p=head;
do
{
if(strcmp(a,p->name)==0)
{
printf("被修改的信息以下:|\t學號\t|\t姓名\t|\tC語言\t|\t英語\t|\t數學\t|\t總分\t|\t排名\t|\n");
printf("|\t%s\t|\t%s\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%d\t|\n",p->num,p->name,p->c_prog,p->eng,p->math,p->sum,p->order);
break;
}
p=p->next; ////指針指向下一個節點
}while(p!=NULL);
printf("\n\n1.修改姓名\n2.修改學號\n3.C語言\n4.英語\n5.數學\n6.總分\n7.退出修改\n\n");
scanf("%d",&c);
switch(c)
{
case 1:
printf("姓名修改成:");
scanf("%s",&p->name);break;
case 2:
printf("學號修改成:");
scanf("%s",&p->num);break;
case 3:
printf("C語言修改成:");
scanf("%lf",&p->c_prog);break;
case 4:
printf("英語修改成:");
scanf("%lf",&p->eng);break;
case 5:
printf("數學修改成:");
scanf("%lf",&p->math);break;
case 6:
printf("總分修改成:");
scanf("%lf",&p->sum);break;
case 7:
break;
}
printf("\n\n操做成功!\n\n");
}
else
printf("******您尚未添加數據喲!\n");
system("pause");
system("cls");
}
void save()
{
FILE *fp;
struct student *p;
if((fp=fopen("student.txt","wb"))==NULL)
printf("Can not open the file!");
p=head;
while(p!=NULL)
{
if(fwrite(p,Length,1,fp)!=1)
{
printf("寫入數據出錯\n");
fclose(fp);
break;
}
p=p->next;
}
fclose(fp);
printf("存儲完成\n");
system("pause");
system("cls");
}
void read()
{
FILE *fp;
if((fp=fopen("student.txt","ab+"))==NULL)
{printf("Can not open file!");exit(0);}
do
{
p1=(struct student*)malloc(Length);
if(n==0) //判斷鏈表開頭
head=p1; //n=0表明輸入的是第一個數據 //p2的結尾所指向的地址是p1
else
p2->next=p1;;
fread(p1,Length,1,fp);
p2=p1;
n+=1;
}while(p2->next!=NULL);
fclose(fp);
printf("讀取完成!\n\n");
system("pause");
system("cls");
}
int main() //主函數
{
int a=1;
while(a!=0)
{
system("cls");
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("請選擇:");
scanf("%d",&a);
if(a>=0&&a<=9)
{
switch(a)
{
case 1:
add();
break;
case 2:
print();
break;
case 3:
find();
break;
case 4:
Delete();
break;
case 5:
amend();
break;
case 6:
save();
break;
case 7:
read();
break;

}
}
else
{
printf(" 您輸入的不符合要求,將返回主菜單!\n");
system("pause");
}
}
}
void find1 ()
{
char a[20];
printf("請輸入要查找的姓名:");
scanf("%s",&a);
p=head;
do
{
if(strcmp(a,p->name)==0)
{
printf("|\t學號\t|\t姓名\t|\tC語言\t|\t英語\t|\t數學\t|\t總分\t|\t排名\t|\n");
printf("|\t%s\t|\t%s\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%d\t|\n",p->num,p->name,p->c_prog,p->eng,p->math,p->sum,p->order);
}
p=p->next; ////指針指向下一個節點
}while(p!=NULL);
system("pause");
system("cls");

}
void find2 ()
{
char a[20];
printf("請輸入要查找的學號:");
scanf("%s",&a);
p=head;
do
{
//指針指向開頭
if(strcmp(a,p->num)==0)
{
printf("|\t學號\t|\t姓名\t|\tC語言\t|\t英語\t|\t數學\t|\t總分\t|\t排名\t|\n");
printf("|\t%s\t|\t%s\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%.1f\t|\t%d\t|\n",p->num,p->name,p->c_prog,p->eng,p->math,p->sum,p->order);
}
p=p->next; //指針指向下一個節點
}while(p!=NULL);
system("pause");
system("cls");
}指針

相關文章
相關標籤/搜索