您的位置:首页 > 其它

我的渣渣学生管理系统,求评论,求改进

2015-04-29 21:15 239 查看
在看完C语言链表和文件部分后,我终于可以小试一下牛刀了,今天写了一个很渣的学生信息管理系统,希望大家能多多指教,多多提出改进意见.此外,这是第一次写博客,有什么不足之处,也请大家指出。下面是我的代码:

# include <stdio.h>

# include<stdlib.h>

# include<io.h>

# include<string.h>

# include<conio.h>

# define N 40

struct score

{

int mathmatic;

int English;

int xiandai;

int Clanguage;

int PE;

};

typedef struct student

{

char name
;

char sex
;

char grade
;//年级

double ave;

struct score chengji;

int panming;//年级排名

struct student *pNext;

}STU,*PSTU;

struct teacher

{

char nicheng
;

char num
;

char mask
;

};

//创建链表,存储学生信息

PSTU input()

{

PSTU head=(PSTU)malloc(sizeof(STU));

if(head==NULL)

{

printf("分配失败,程序中止");

exit(-1);

}

int i,len,sum;

printf("请输入你想要录入学生的个数:");

scanf("%d",&len);

PSTU tail=head;

tail->pNext=NULL;

for(i=0;i<len;i++)

{

sum=0;

PSTU pNew=(PSTU)malloc(sizeof(STU));

if(pNew==NULL)

{

printf("分配失败,程序中止");

exit(-1);

}

printf("请输入第%d个学生的信息:\n",i+1);

printf("请输入学生的姓名:");

fflush(stdin);

gets(pNew->name);

printf("请输入学生的性别:");

fflush(stdin);

gets(pNew->sex);

printf("请输入学生的年级:");

fflush(stdin);

gets(pNew->grade);

printf("请输入学生的高数成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.mathmatic);

sum+=pNew->chengji.mathmatic;

printf("请输入学生的英语成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.English);

sum+=pNew->chengji.English;

printf("请输入学生的线代成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.xiandai);

sum+=pNew->chengji.xiandai;

printf("请输入学生的C语言成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.Clanguage);

sum+=pNew->chengji.Clanguage;

printf("请输入学生的体育成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.PE);

sum+=pNew->chengji.PE;

pNew->ave=sum/5.0;

//printf("该学生的平均分为:%lf\n",pNew->ave);

tail->pNext=pNew;

pNew->pNext=NULL;

tail=pNew;

}

return head;

}

//在链表中插入节点

PSTU insert(PSTU head)

{

int n,m,i,j=0,sum;

printf("请输入你想要插入几个学生的信息:");

scanf("%d",&n);

for(i=0;i<n;i++)

{

sum=0;

printf("请输入你想要在第几个学生信息前面插入新的学生信息:");

scanf("%d",&m);

PSTU p=head;

while(j<m-1&&p!=NULL)

{

p=p->pNext;

j++;

}

if(j>m-1||p==NULL)

return head;

PSTU pNew=(PSTU)malloc(sizeof(STU));

if(pNew==NULL)

{

printf("分配失败,程序中止");

exit(-1);

}

printf("请输入学生的姓名:");

fflush(stdin);

gets(pNew->name);

printf("请输入学生的性别:");

fflush(stdin);

gets(pNew->sex);

printf("请输入学生的年级:");

fflush(stdin);

gets(pNew->grade);

printf("请输入学生的高数成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.mathmatic);

sum+=pNew->chengji.mathmatic;

printf("请输入学生的英语成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.English);

sum+=pNew->chengji.English;

printf("请输入学生的线代成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.xiandai);

sum+=pNew->chengji.xiandai;

printf("请输入学生的C语言成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.Clanguage);

sum+=pNew->chengji.Clanguage;

printf("请输入学生的体育成绩:");

fflush(stdin);

scanf("%d",&pNew->chengji.PE);

sum+=pNew->chengji.PE;

pNew->ave=sum/5.0;

PSTU q=p->pNext;

p->pNext=pNew;

pNew->pNext=q;

}

return head;

}

//删除链表的节点

PSTU delete_(PSTU head)

{

int i,j=0,m,n;

printf("请输入你想要删除几个学生的信息:");

scanf("%d",&n);

for(i=0;i<n;i++)

{

printf("你想要删除第几个学生的信息:");

scanf("%d",&m);

PSTU p=head;

while(j<m-1&&p!=NULL)

{

p=p->pNext;

j++;

}

if(j>m-1||p==NULL)

return head;

PSTU q=p->pNext;

p->pNext=p->pNext->pNext;

free(q);

q=NULL;

}

return head;

}

//对链表按照平均分进行排序

PSTU sort(PSTU head)

{

int i,j,len=0;

double t;

PSTU p=head->pNext;

PSTU m,n;

while(p!=NULL)

{

p=p->pNext;

len++;

}

for(i=0,m=head->pNext;i<len-1;i++,m=m->pNext)

for(j=i+1,n=m->pNext;j<len;j++,n=n->pNext)

{

if(m->ave>n->ave)

{

t=m->ave;

m->ave=n->ave;

n->ave=t;

}

}

return head;

}

//输出遍历链表

void output(PSTU head)

{

PSTU p=head->pNext;

int i=1;

while(p!=NULL)

{

printf("第%d个学生的信息是:\n",i);

printf("学生的姓名:%s\n学生的性别是:%s\n学生的年级:%s\n",p->name,p->sex,p->grade);

printf("学生的高数成绩是:%d\n学生的线代成绩是:%d\n学生的C语言成绩是:%d\n学生的英语成绩是:%d\n学生的体育成绩是:%d\n",p->chengji.mathmatic,p->chengji.xiandai,p->chengji.Clanguage,p->chengji.English,p->chengji.PE);

printf("学生的平均分是:%lf\n",p->ave);

i++;

p=p->pNext;

}

}

void file_(PSTU head)

{

FILE * fp;

int i=1;

PSTU p=head->pNext;

fp=fopen("G:/keshe/学生信息.txt","w");

if(fp==NULL)

{

printf("文件打开失败,按任意键退出");

getchar();

exit(-1);

}

while(p!=NULL)

{

fprintf(fp,"第%d个学生的信息是:\n",i);

fprintf(fp,"学生的姓名:%s\n学生的性别是:%s\n学生的年级:%s\n",p->name,p->sex,p->grade);

fprintf(fp,"学生的高数成绩是:%d\n学生的线代成绩是:%d\n学生的C语言成绩是:%d\n学生的英语成绩是:%d\n学生的体育成绩是:%d\n",p->chengji.mathmatic,p->chengji.xiandai,p->chengji.Clanguage,p->chengji.English,p->chengji.PE);

fprintf(fp,"学生的平均分是:%lf\n",p->ave);

i++;

p=p->pNext;

}

}

int main()

{

int n,m;

PSTU head=NULL;

struct teacher yonghu;

FILE * fp;

printf("欢迎进入学生管理系统!\n");

printf("如果有账号请输入1直接进入登陆界面,如果没有请输入2进行注册:");

scanf("%d",&n);

if(n==1)

{

fp=fopen("G:/keshe/用户信息.txt","w");

if(fp==NULL)

{

printf("文件打开失败,按任意键退出");

getchar();

exit(-1);

}

printf("用户名:");

fflush(stdin);

gets(yonghu.num);

printf("密码:");

fflush(stdin);

gets(yonghu.mask);

fprintf(fp,"用户名:%s\n密码:%s\n",yonghu.num,yonghu.mask);

fclose(fp);

}

if(n==2)

{

fp=fopen("G:/keshe/用户信息.txt","w");

if(fp==NULL)

{

printf("文件打开失败,按任意键退出");

getchar();

exit(-1);

}

printf("昵称:");

fflush(stdin);

gets(yonghu.nicheng);

printf("用户名:");

fflush(stdin);

gets(yonghu.num);

printf("密码:");

fflush(stdin);

gets(yonghu.mask);

fprintf(fp,"昵称:%s\n用户名:%s\n密码:%s\n",yonghu.nicheng,yonghu.num,yonghu.mask);

fclose(fp);

}

system("cls");

for(;;)

{

printf("**********************************************************\n");

printf("1.输入学生的信息\n2.插入学生信息\n3.删除学生信息\n4.排序\n5.输出\n6.退出\n");

printf("**********************************************************\n");

printf("请选择你要执行的功能:");

scanf("%d",&m);

if(m==6)

break;

switch(m)

{

case 1:system("cls");head=input();break;

case 2:system("cls");if(head==NULL) {printf("你还没有对学生信息进行录入,请先执行功能一\n");break;};head=insert(head);break;

case 3:system("cls");if(head==NULL) {printf("你还没有对学生信息进行录入,请先执行功能一\n");break;};head=delete_(head);break;

case 4:system("cls");if(head==NULL) {printf("你还没有对学生信息进行录入,请先执行功能一\n");break;};head=sort(head);printf("按平均分升序排序后输出:\n");output(head);break;

case 5:system("cls");if(head==NULL) {printf("你还没有对学生信息进行录入,请先执行功能一\n");break;};output(head);break;

}

printf("按任意键继续");

getch();

system("cls");

}

//用文件存储所有学生的信息

printf("已将学生信息存储到G:/keshe/学生信息.txt中\n");

file_(head);

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: