C语言学生信息管理系统.docx
《C语言学生信息管理系统.docx》由会员分享,可在线阅读,更多相关《C语言学生信息管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
C语言学生信息管理系统
C程序设计课程实践报告
项目名称:
c6.学生信息管理系统
所在班级:
****
小组成员:
********
任课教师:
******
起止时间:
2014.05.18——2014.06.08
项目基本信息
项目名称
C6.学生信息管理系统
项目简介
本系统是编写一个函数来实现对一个字符串的字母,数字,空格,和其他个数的统计。
小组成员
********
分工
*****:
学生信息输入、学生信息输出、按学号查询成绩、按姓名查询成绩等。
*****:
删除学生信息、插入学生信息、修改学生信息、保存学生信息、学号排序等。
课程实践评定成绩记录
指导教师意见
系统完成情况:
优良中差
报告完成情况:
优良中差
答辩评定成绩
团队整体成绩:
成员成绩
****
130906050
*****
130906036
综合成绩
一、问题描述及分析
问题:
制作学生信息管理系统需要明确对学生信息管理系统的需求和操作,将学生信息规范化、明确简单化,以及对学生信息以菜单格式展现给用户,方便操作,信息详细展现出来。
分析:
1、学生信息管理系统以菜单格式显示,使用户明确知道操作系统的步骤。
2、学生信息功能为按学号、姓名查询,对学生信息的删除、插入,修改学生信息,把学生信息写入student文件,并读出来等。
3、以switch以及for循环,对学生信息信息进行自由操作。
二、功能块及数据结构描述
main()//主函数
structstudent//学生信息结构体
structstudent*creat()//建立学生信息
voidprint(structstudent*head)//学生信息输出和读出
voidcheck(structstudent*head,longcheck_num)//按学号查询学生的信息
voidinspect(structstudent*head,charinspect_name[])//按姓名查信息
structstudent*del(structstudent*head,longnum)//删除学生的信息
structstudent*insert(structstudent*head,structstudent*stu)//插入学生的信息
structstudent*amend(structstudent*head)//修改信息学生的信息
structstudent*sort(structstudent*head)//按学号对学生信息排序
voidsave(structstudent*head)//保存到文件
三、主要算法流程描述及部分核心算法
流程图如下图所示。
核心算法为:
1、删除学生信息
structstudent*del(structstudent*head,longnum)/*删除*/
{
structstudent*p,*p1;
if(head==NULL)
{printf("\nNULL\n");
returnhead;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p=p1;p1=p1->next;
}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep->next=p1->next;
printf("删除:
%ld\n",num);
n=n-1;
}
elseprintf("\n%ldnotbeenfound!
\n",num);
returnhead;
}
2、插入学生信息
structstudent*insert(structstudent*head,structstudent*stu)/*插入*/
{
structstudent*p,*p1,*p2;
p1=head;
p=stu;
if(head==NULL)
{head=p;p->next=NULL;}
else
{while(p1->next!
=NULL)
{p1=p1->next;}
p1->next=p;
p->next=NULL;
}
n=n+1;
returnhead;
}
3、修改学生的信息
structstudent*amend(structstudent*head)
{
structstudent*p1,*stu,s;
intm;
stu=&s;
p1=head;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改出生年份\n");
printf("4.修改出生月份\n");
printf("5.修改号码\n");
printf("6.修改住址\n");
printf("7.修改email\n");
printf("8.退出修改系统\n");
printf("------------------\n");
printf("请输入要要修改的学生的学号:
\n");scanf("%ld",&stu->num);
for(;p1!
=NULL;p1=p1->next)
if(p1->num==stu->num)
{
printf("请输入要修改哪一项:
\n");scanf("%d",&m);
while
(1)
{
switch(m)
{
case1:
{printf("请输入新的姓名:
\n");
scanf("%s",p1->name);
break;}
case2:
{printf("请输入新的年龄:
\n");
scanf("%d",&p1->age);
break;}
case3:
{printf("请输入新的出生年份:
\n");
scanf("%d",&p1->year);
break;}
case4:
{
printf("请输入新的出生月份:
\n");
scanf("%d",&p1->month);
break;}
case5:
{printf("请输入新的电话号码:
\n");
scanf("%s",p1->phone);
break;}
case6:
{printf("请输入新的地址:
\n");
scanf("%s",p1->address);
break;}
case7:
{printf("请输入新的E-mail地址:
\n");
scanf("%s",p1->email);
break;}
default:
printf("请输入1~8之间的步骤!
\n");
}
printf("请输入要修改的下一项:
\n");
scanf("%d",&m);
if(m==8){printf("*******************退出修改系统!
*******************\n");break;};
}
}
else{printf("没有本学生的任何信息!
\n");}
returnhead;
}
4、按姓名、学号查询学生信息
voidcheck(structstudent*head,longcheck_num)/*按学号查询*/
{
FILE*fp;
structstudent*p1;
fp=fopen("student","rb");
if(head==NULL)
{printf("thisisablank!
");}
p1=head;
while(check_num!
=p1->num&&p1->next!
=NULL)
{
p1=p1->next;
}
if(check_num==p1->num)
{
fread(p1,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p1->num,p1->name,p1->age,p1->year,p1->month,p1->phone,p1->address,p1->email);
}
elseprintf("%ld没有发现!
\n",check_num);
}
voidinspect(structstudent*head,charinspect_name[])/*按姓名查询*/
{
FILE*fp;
structstudent*p1;
fp=fopen("student","rb");
p1=head;
if(head==NULL)
{printf("thisisablank!
");}
while(strcmp(inspect_name,p1->name)!
=0&&p1->next!
=NULL)
{
p1=p1->next;
}
if(strcmp(inspect_name,p1->name)==0)
{
fread(p1,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p1->num,p1->name,p1->age,p1->year,p1->month,p1->phone,p1->address,p1->email);
}
elseprintf("%s没有发现!
\n",inspect_name);
}
5、对学生信息进行排序整理
Structstudent*sort(structstudent*head)
{
structstudent*p1,*p2,*temp,s;
temp=&s;
if(head==NULL)
{printf("thisisablank!
");returnhead;}
for(p1=head;p1!
=NULL;p1=p1->next)
{
for(p2=p1->next;p2!
=NULL;p2=p2->next)
{
if(p1->num>=p2->num)
{
temp->num=p1->num;
p1->num=p2->num;
p2->num=temp->num;
strcpy(temp->name,p1->name);
strcpy(p1->name,p2->name);
strcpy(p2->name,temp->name);
temp->age=p1->age;
p1->age=p2->age;
p2->age=temp->age;
temp->year=p1->year;
p1->year=p2->year;
p2->year=temp->year;
temp->month=p1->month;
p1->month=p2->month;
p2->month=temp->month;
strcpy(temp->phone,p1->phone);
strcpy(p1->phone,p2->phone);
strcpy(p2->phone,temp->phone);
strcpy(temp->address,p1->address);
strcpy(p1->address,p2->address);
strcpy(p2->address,temp->address);
strcpy(temp->email,p1->email);
strcpy(p1->email,p2->email);
strcpy(p2->email,temp->email);
}
}}
returnhead;
}
6、文件读入
voidsave(structstudent*head)
{
FILE*fp;
structstudent*p;
p=head;
fp=fopen("student","wb");
for(;p!
=NULL;p=p->next)
if(fwrite(p,sizeof(structstudent),1,fp)!
=1)
printf("filewriteerror!
\n");
}
7、文件读出
voidprint(structstudent*head)
{
FILE*fp;
structstudent*p;
p=head;
fp=fopen("student","rb");
printf("\n学生的学号姓名年龄出生年月电话住址Email为:
\n");
if(head!
=NULL)
{
while(p!
=NULL)
{
fread(p,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p->num,p->name,p->age,p->year,p->month,p->phone,p->address,p->email);
p=p->next;
}
}
}
8、文件关闭
voidclose()
{
FILE*fp;
if((fp=fopen("student","wb")!
=NULL)||(fp=fopen("student","wb")!
=NULL))
fclose(fp);
}
四、系统使用
1、菜单目录
2、学生信息输入输出
3、按学号查询学生信息
4、按姓名查询学生信息
5、删除学生的信息
6、插入学生的信息
7、修改学生信息
8、对学生信息进行排序
五、问题及解决办法
1、有些程序功能无法实现,通过查阅资料以及向老师请教,解决问题。
2、有些程序功能不完善,在网上查阅资料加以修改。
六、课外实践总结
经过几周的课程设计,巩固和加深了我们对程序设计的理解,提高了综合运用课本所学知识的能力。
培养了我们独立思考,深入研究,团队合作、分析问题、解决问题的能力。
按照要求编写程序设计报告,能正确阐述设计和实验结果,正确绘制系统和程序框图。
同时,通过这次课程设计我们发现,程序设计基础掌握的还不够扎实,有很多地方还需要继续努力。
课程设计是把我们所学的理论知识进行系统的总结并应用于实践的良好机会,有利于加强我们用知识理论来分析实际问题的能力,进而加强了我们对知识认识的实践度,巩固了我们的理论知识,深化了对知识的认识,并为走向社会打下一个良好的基础。
七源程序
#include
#include
#include
#include
#defineLENsizeof(structstudent)
#defineNULL0
structstudent
{
longnum;
charname[20];
intage;
intyear;
intmonth;
intphone[15];
charaddress[50];
charemail[50];
structstudent*next;
};
intn;
structstudent*creat()/*录入学生信息*/
{
structstudent*head,*p1,*p2;
n=0;
p1=p2=(structstudent*)malloc(sizeof(structstudent));
printf("\n**请输入学生的学号姓名年龄出生年份月份电话住址Email(如果不再输入,则需要输入项都为0):
\n");scanf("%ld%s%d%d%d%s%s%s",&p1->num,p1->name,&p1->age,&p1->year,&p1->month,p1->phone,p1->address,p1->email);
head=NULL;
while(p1->num!
=NULL)
{
n=n+1;
if(n==1)head=p1;
elsep2->next=p1;
p2=p1;
p1=(structstudent*)malloc(sizeof(structstudent));
scanf("%ld%s%d%d%d%s%s%s",&p1->num,p1->name,&p1->age,&p1->year,&p1->month,p1->phone,p1->address,p1->email);
}
p2->next=NULL;
returnhead;
}
voidprint(structstudent*head)/*浏览学生信息*/
{
FILE*fp;
structstudent*p;
p=head;
fp=fopen("student","rb");
printf("\n学生的学号姓名年龄出生年月电话住址Email为:
\n");
if(head!
=NULL)
{
while(p!
=NULL)
{
fread(p,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p->num,p->name,p->age,p->year,p->month,p->phone,p->address,p->email);
p=p->next;
}
}
}
voidcheck(structstudent*head,longcheck_num)/*按学号查询*/
{
FILE*fp;
structstudent*p1;
fp=fopen("student","rb");
if(head==NULL)
{printf("thisisablank!
");}
p1=head;
while(check_num!
=p1->num&&p1->next!
=NULL)
{
p1=p1->next;
}
if(check_num==p1->num)
{
fread(p1,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p1->num,p1->name,p1->age,p1->year,p1->month,p1->phone,p1->address,p1->email);
}
elseprintf("%ld没有发现!
\n",check_num);
}
voidinspect(structstudent*head,charinspect_name[])/*按姓名查询*/
{
FILE*fp;
structstudent*p1;
fp=fopen("student","rb");
p1=head;
if(head==NULL)
{printf("thisisablank!
");}
while(strcmp(inspect_name,p1->name)!
=0&&p1->next!
=NULL)
{
p1=p1->next;
}
if(strcmp(inspect_name,p1->name)==0)
{
fread(p1,sizeof(structstudent),1,fp);
printf("%ld\t%s\t%d\t%d\t%d\t%s\t%s\t%s\n",p1->num,p1->name,p1->age,p1->year,p1->month,p1->phone,p1->address,p1->email);
}
elseprintf("%s没有发现!
\n",inspect_name);
}
structstudent*del(structstudent*head,longnum)/*删除*/
{
structstudent*p,*p1;
if(head==NULL)
{printf("\nNULL\n");
returnhead;}
p1=head;
while(num!
=p1->num&&p1->next!
=NULL)
{p=p1;p1=p1->next;
}
if(num==p1->num)
{if(p1==head)head=p1->next;
elsep->next=p1->next;
printf("删除:
%ld\n",num);
n=n-1;
}
elseprintf("\n%ldnotbeenfound!
\n",num);
returnhead;
}
structstudent*insert(structstudent*head,structstudent*stu)/*插入*/
{
structstudent*p,*p1;
p1=head;
p=stu;
if(head==NULL)
{head=p;p->next=NULL;}
else
{while(p1->next!
=NULL)
{p1=p1->next;}
p1->next=p;
p->next=NULL;
}
n=n+1;
returnhead;
}
structstudent*amend(structstudent*head)/*修改信息*/
{
structstudent*p1,*stu,s;
intm;
stu=&s;
p1=head;
printf("------------------\n");
printf("1.修改姓名\n");
printf("2.修改年龄\n");
printf("3.修改出生年份\n");
printf("4.修改出生月份\n");
printf("5.修改号码\n");
printf("6.修改住址\n");
printf("7.修改email\n");
printf("8.退出修改系统\n");
printf("------------------\n");
printf("请输入要要修改的学生的学号:
\n");scanf("%ld",&stu->num);
for(;p1!
=NULL;p1=p1->next)
if(p1->num==stu->num)
{
printf("请输入要修改哪一项:
\n");