学生成绩管理系统.docx
- 文档编号:2005354
- 上传时间:2023-05-02
- 格式:DOCX
- 页数:24
- 大小:61.99KB
学生成绩管理系统.docx
《学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统.docx(24页珍藏版)》请在冰点文库上搜索。
学生成绩管理系统
程序设计基础课程设计报告
题目:
学生成绩管理系统
姓名:
班级:
学号:
指导教师:
完成地点:
完成时间:
目录
一.设计题目及要求…………………………………1
二.主要数据结构……………………………………2
三.模块设计…………………………………………3
四.流程图………………………………………….3
五.源代码………………………………................5
六.测试结果及分析………………………………8
七.小结…………………………………………….10
参考文献及网站……………………………………….10
《高级语言程序设计》课程设计任务书
设计题目1
学生信息管理系统
设计任务和目标
任务:
独立设计学生信息管理系统,实现以下功能:
一、基本功能
1、信息录入
录入学生成绩信息(包括学生学号、姓名、各门课程的成绩等)。
2、信息查询
输入学号,查询某学生各门课程的成绩及平均成绩;
查询所有学生各门课程的成绩;
3、信息删除与修改
输入学号,删除该学生的成绩信息;
输入学号,查询并显示出该学生的成绩信息,并在此基础上进行修改。
二、扩充功能
1、排序
对学生数据按可选的自定义规则进行排序,显示出排序结果。
2、信息保存
将学生的学号、姓名及各门课程的成绩等信息保存于外部存储器的文件中。
3、信息装载
从已保存好的文件中将信息读入内存,在此基础上可以进行各种基本操作。
设计内容与步骤
1、初步完成总体设计,搭好框架,确定人机对话的界面,确定函数个数。
2、建立一个文件,将每位学生的信息写入文件中(人数利用宏定义设定)并能显示于屏幕上。
3、完成上述显示、查找(姓名,性别等)、修改等功能。
4、进一步要求,修改记录设置密码操作。
设计要求
1、用C语言实现程序设计;
2、利用结构体数组实现学生信息的数据结构设计;
3、系统的各个功能模块要求用函数的形式实现;
4、界面友好(良好的人机交互),程序加必要的注释。
课程设计实验报告要求:
1、题目、课程设计任务、数据结构、程序的总体设计(算法)、模块划分。
2、流程图、主要源程序代码(需打印)、测试情况及调试中问题与解决方案
//主要数据结构
structstudent
{
intiNum;//学号
charname[10];//姓名
charsex[5];//姓别
floatenglish;//英语成绩
floatcyuyan;//c语言成绩
floatshuxu;//数学成绩
floattotal;//总成绩
doubleaver;//平均成绩
structstudent*pStrNext;
};
输入学生成绩
插入学生成绩
//源代码
//***************************************************
//*课程设计:
学生成绩管理系统。
*
//*作者:
陈新卫*
//*班级:
计算机科学与技术1101B*
//*编制时间:
2012年*
//****************************************************
//库函数
#include
#include
#include
//自定义数据类型
structstudent
{
intiNum;
charname[10];
charsex[5];
floatenglish;
floatcyuyan;
floatshuxu;
floattotal;
doubleaver;
structstudent*pStrNext;
};
//调用辅助函数输入要求学生填写的信息
voidprint_biaotou()
{
printf("================================================================================\n");
printf("学号|姓名|性别|英语成绩|c语言成绩|数学成绩|总成绩|平均成绩|\n");
}
//输入学生信息
//调用输出函数输入学生信息
structstudent*input()
{
charsign;
structstudent*pStrStuHead=0,*pStrStuTemp,*pStrStuTail=0;
pStrStuTemp=(structstudent*)malloc(sizeof(structstudent));
printf("请输入学生的学号、姓名、性别、英语成绩、c语言成绩、数学成绩:
\n");
scanf("%d%s%s%f%f%f",&pStrStuTemp->iNum,pStrStuTemp->name,pStrStuTemp->sex,&pStrStuTemp->english,&pStrStuTemp->cyuyan,&pStrStuTemp->shuxu);
pStrStuTemp->total=pStrStuTemp->english+pStrStuTemp->cyuyan+pStrStuTemp->shuxu;
pStrStuTemp->aver=pStrStuTemp->total/3.0;
pStrStuTemp->pStrNext=0;
//*接入链表
getchar();
printf("是否继续输入?
(Y:
继续/N:
不继续):
\n");//判断是否继续输入,继续输入y,不继续输入N
scanf("%c",&sign);
while(sign!
='n'&&sign!
='N')
{
if(!
pStrStuHead)
//*接入第一个结点,头指针,尾指针均指向该结点
pStrStuHead=pStrStuTail=pStrStuTemp;
else
{
//接入非第一个结点
pStrStuTail->pStrNext=pStrStuTemp;//接在尾指针所指结点之后
pStrStuTail=pStrStuTemp;//尾指针指向新加入结点
}
pStrStuTemp=(structstudent*)malloc(sizeof(structstudent));
printf("请输入学生的学号、姓名、性别、英语成绩、c语言成绩、数学成绩:
\n");
scanf("%d%s%s%f%f%f",&pStrStuTemp->iNum,pStrStuTemp->name,pStrStuTemp->sex,&pStrStuTemp->english,&pStrStuTemp->cyuyan,&pStrStuTemp->shuxu);
pStrStuTemp->total=pStrStuTemp->english+pStrStuTemp->cyuyan+pStrStuTemp->shuxu;
pStrStuTemp->aver=pStrStuTemp->total/3.0;
pStrStuTemp->pStrNext=0;
getchar();
printf("是否继续输入?
(Y/N):
\n");
scanf("%c",&sign);
}
if(!
pStrStuHead)
//*接入第一个结点,头指针,尾指针均指向该结点
pStrStuHead=pStrStuTail=pStrStuTemp;
else
{
//接入非第一个结点
pStrStuTail->pStrNext=pStrStuTemp;//接在尾指针所指结点之后
pStrStuTail=pStrStuTemp;//尾指针指向新加入结点
}
returnpStrStuHead;
}
//按学号查找学生信息
voidsearch_bynum(structstudent*p1)
{
structstudent*p2;
intnum;
charcontinue_input='N';
printf("请输入你要查找学生的学号");
scanf("%d",&num);
p2=p1;
while(p2)
{
if(p2->iNum==num)
break;
p2=p2->pStrNext;
}
if(p2==NULL)
printf("没有找到姓名是%d的学生!
",num);
else
{
print_biaotou();
printf("%d,\t%s,\t%s,\t%.1f,\t%.1f,\t%.1f,\t%.1f,\t%.1f,\t\n",p2->iNum,p2->name,p2->sex,p2->english,p2->cyuyan,p2->shuxu,p2->total,p2->aver);
}
getchar();
printf("是否继续查询?
(Y:
继续,N:
不继续)");//判断是否继续输入,继续输入y,不继续
scanf("%c",&continue_input);
if(continue_input=='Y'||continue_input=='y')
{
search_bynum(p1);
}
}
//按姓名查找学生信息
voidsearch_byname(structstudent*p1)
{
structstudent*p2;
charcname[5];
charcontinue_input='N';
printf("请输入你要查找学生的姓名");
scanf("%s",cname);
p2=p1;
while(p2)
{
if(strcmp(p2->name,cname)==0)
break;
p2=p2->pStrNext;
}
if(p2==NULL)
printf("没有找到姓名是%s的学生!
",cname);
else
{
print_biaotou();
printf("%d,\t%s,\t%s,\t%.1f,\t%.1f,\t%.1f,\t%.1f,\t%.1f,\t\n",p2->iNum,p2->name,p2->sex,p2->english,p2->cyuyan,p2->shuxu,p2->total,p2->aver);
}
getchar();
printf("是否继续查询?
(Y:
继续,N:
不继续)");
scanf("%c",&continue_input);
if(continue_input=='Y'||continue_input=='y')
{
search_byname(p1);
}
}
//调用辅助函数输出要求学生填写的信息信息
voidlist(structstudent*pStrStuHead)
{
print_biaotou();
while(pStrStuHead)
{
printf("%-4d|%s|%s|%8.0f|%9.0f|%8.0f|%6.0f|%8.0f|\n",pStrStuHead->iNum,pStrStuHead->name,pStrStuHead->sex,pStrStuHead->english,pStrStuHead->cyuyan,pStrStuHead->shuxu,pStrStuHead->total,pStrStuHead->aver);
pStrStuHead=pStrStuHead->pStrNext;
}
}
//调用辅助函数输出标题信息
voidprint_biaoti()
{
printf("****************************************\n");
printf("*学生成绩管理系统*\n");
printf("****************************************\n");
}
//辅助函数输出主菜单信息
voidprint_menu_main()
{
printf("|====================================|\n");
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");
}
//辅助函数输出查找菜单信息
voidprint_menu_search()
{
printf("|\n");
printf("1,按照学号查询。
\n");
printf("2,按照姓名查询。
\n");
printf("3,返回上级菜单。
\n");
printf("4,直接退出学生管理系统\n");
printf("|\n");
}
//
structstudent*get_last_student(structstudent*p)
{
if(p->pStrNext==NULL)
{
returnp;
}
elseget_last_student(p->pStrNext);
returnp;
}
//插入链表
structstudent*insert(structstudent*head)
{
structstudent*ptr,*ptr1,*ptr2,*stu;
charcontinue_choice;
continue_choice='N';
ptr2=head;
/*ptr指向待插入的新的学生记录点*/
stu=(structstudent*)malloc(sizeof(structstudent));
printf("请输入学生的学号、姓名、性别、英语成绩、c语言成绩、数学成绩:
\n");
scanf("%d%s%s%f%f%f",&stu->iNum,stu->name,stu->sex,&stu->english,&stu->cyuyan,&stu->shuxu);
stu->total=stu->english+stu->cyuyan+stu->shuxu;
stu->aver=stu->total/3.0;
stu->pStrNext=0;
ptr=stu;
if(head==NULL){
head=ptr;/*新插入结点为头结点*/
head->pStrNext=NULL;
}
else{/*原链表不为空时插入*/
while((ptr->iNum>ptr2->iNum)&&(ptr2->pStrNext!
=NULL)){
ptr1=ptr2;/*ptr1,ptr2各后移一个结点*/
ptr2=ptr2->pStrNext;
}
if(ptr->iNum<=ptr2->iNum){/*在ptr1,ptr2之间插入新结点*/
if(head==ptr2)head=ptr;
else
ptr1->pStrNext=ptr;
ptr->pStrNext=ptr2;
}
else{/*新插入节点为尾结点*/
ptr2->pStrNext=ptr;
ptr->pStrNext=NULL;
}
}
getchar();
printf("是否继续添加?
(Y:
继续,N:
不继续)");
scanf("%c",&continue_choice);
if(continue_choice=='Y'||continue_choice=='y')
{
insert(head);
}
returnhead;
}
//删除学生信息
structstudent*del(structstudent*pStrStuHead)
{
intinum;
intn,sign;
printf("请输入删除学生信息所需要的密码:
");
scanf("%d",&sign);
if(sign==123)
{
printf("请输入学生的学号:
");
scanf("%d",&inum);
structstudent*p1,*p2;
if(pStrStuHead==pStrStuHead==NULL)
{
printf("\nlistnull!
\n");
return(pStrStuHead);
}
p1=pStrStuHead;
while(inum!
=p1->iNum&&p1->pStrNext!
=NULL)
{p2=p1;p1=p1->pStrNext;}
if(inum==p1->iNum)
{
if(p1==pStrStuHead)
pStrStuHead=p1->pStrNext;
else
p2->pStrNext=p1->pStrNext;
printf("delete:
%d\n",inum);
n=n-1;
}
else
printf("%dnotbeenfound!
\n",inum);
}
elseprintf("输入密码错误你将不能删除此学生的信息!
\n");
return(pStrStuHead);
}
//文件读取
voidduqu(structstudent*pStrStuHead)
{
FILE*fp;
fp=fopen("student","rb");
if(fp==0)
{
printf("不能打开文件!
");
exit(0);
}
else
while
(1)
{
fread(pStrStuHead,sizeof(structstudent),1,fp);
pStrStuHead=pStrStuHead->pStrNext;
}
fclose(fp);
}
//存入文件
voidbaocun(structstudent*pStrStuHead)
{
structstudent*p;
FILE*fp;
fp=fopen("student原始数据保存.txt","w");
if(fp==0)
{
printf("不能打开文件!
\n");
exit(0);
}
else
for(p=pStrStuHead;p;p=pStrStuHead->pStrNext)
{
fwrite(p,sizeof(structstudent),1,fp);
}
fclose(fp);
}
//排序函数
structstudent*sort(structstudent*h)
{
structstudent*p,*q,*t,*h1;
if(h->pStrNext==NULL)
printf("error");
else
{
h1=h->pStrNext;
h1->pStrNext=NULL;
while(h1!
=NULL)
{
t=h1;
h1=h1->pStrNext;
p=h;
q=h;
while(t->aver
=NULL)
{
q=p;
p=p->pStrNext;
if(p==q)
{
t->pStrNext=p;
h=t;
}
else
{
t->pStrNext=p;
q->pStrNext=t;
}
p=h;
}
}
}
returnh;
}
voidmain()
{
structstudent*strStuTemp;
structstudent*pStrStuHead;
pStrStuHead=(structstudent*)malloc(sizeof(structstudent));
chars[10]="xxx";
chara[5]="xxx";
pStrStuHead->iNum=0;
strcpy(pStrStuHead->name,s);
strcpy(pStrStuHead->sex,s);
pStrStuHead->english=0;
pStrStuHead->cyuyan=0;
pStrStuHead->shuxu=0;
pStrStuHead->total=0;
pStrStuHead->aver=0;
pStrStuHead->pStrNext=0;
print_biaoti();
system("cls");
intmenu_choice=0,menu_search_choice,sign1=1,sign2=1,sign3=1,sign4=1;
while(sign1!
=0)
{
sign2=1;
while(sign2!
=0)
{
print_menu_main();
printf("请选择:
");
scanf("%d",&menu_choice);
switch(menu_choice)
{
case1:
pStrStuHead->pStrNext=input();break;
case2:
list(pStrStuHead);break;
case3:
sign3=1;
while(sign3!
=0)
{
sign4=1;
while(sign4!
=0)
{
print_menu_search();
printf("请选择:
");
scanf("%d",&menu_sea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 学生 成绩管理系统