c课程设计学生成绩管理系统.docx
《c课程设计学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《c课程设计学生成绩管理系统.docx(11页珍藏版)》请在冰豆网上搜索。
![c课程设计学生成绩管理系统.docx](https://file1.bdocx.com/fileroot1/2022-11/27/9435d273-2f2e-4de1-bdf7-2d89a7e2a6c4/9435d273-2f2e-4de1-bdf7-2d89a7e2a6c41.gif)
c课程设计学生成绩管理系统
一、设计题目与设计目的意义………………………………………3
二、系统分析…………………………………………………………3
三、系统设计…………………………………………………………4
四、调试、排错、测试、试运行过程………………………………5
五、源程序主要代码…………………………………………………7
六、总结及自我评价…………………………………………………13
七、参考文献…………………………………………………………14
一、设计题目与设计目的意义
学生信息管理系统设计:
内容:
(1)系统功能需求:
包括学生信息的添加、修改、删除和查询;
(2)数据结构设计:
使用结构体类型存储学生信息数据,并将数据存储于文件内以方便学生信息管理。
(3)系统算法设计并编程实现学生信息的添加、修改、删除和查询功能。
学生信息管理系统设计的目的意义:
巩固和加深对C++课程的基本知识的理解和掌握。
能够通过文件对数据进行操作,包括对文件的打开、关闭、读取、写入及重写等操作。
学会函数的调用,能够将一个大的程序分解为多个函数,实现模块化程序设计。
学会利用C++语言进行简单程序设计的基本思路和方法。
掌握一个程序编译、连接、调试的基本技能,提高运用高级语言解决实际问题的能力。
二、系统分析
选择
Main函数
退出
修改
查询
删除
插入
排序
显示
输入
系统功能模块划分:
三、系统设计:
(1)、主函数:
调用菜单函数。
(2)、菜单函数:
通过switch语句来实现选择要实现的功能函数。
(3)、输入函数:
通过打开文件、输入学生信息、关闭文件、返回菜单来实现学生信息的输入。
(4)、显示函数:
以只读方式打开文件后读取文件内容来显示到计算机屏幕上最后再关闭文件返回菜单。
(5)、排序函数:
通过起泡法来对所输入的学生按成绩由高到低的顺序进行排序。
(6)、插入函数:
通过将学生信息写入文件的方式来实现学生信息的插入。
(7)、删除函数:
通过两个指针变量同时指向一个文件来对文件进行再次赋值来实现删除功能。
(8)、查询函数:
通过学生的姓名与文件中学生姓名的比较找到该学生后在将该学生的所有信息显示出来
(9)、修改函数:
通过两个指针变量同时指向一个文件先找到要修改学生,将其信息输入后在重新写入文件。
(10)、选择函数:
选择所要进行的操作。
(11)、退出:
退出系统。
四、调试、排错、测试、试运行过程
输入学生信息如图:
排序如图:
插入学生信息如图:
查询学生信息
五、源程序主要代码
#include
#include
#include
intn=5;
/*全局变量*/
structstudent/*定义结构体数组*/
{charnum[10];
charname[10];
intscore;
}stu[3];
intmenu_select()/*菜单选择函数*/
{chara;
do{
system("cls");
printf("\t************学生成绩管理系统****************\n");
printf("\t\t1.输入学生成绩\n");
printf("\t\t2.显示学生成绩\n");
printf("\t\t3.学生成绩排序\n");
printf("\t\t4.插入学生记录\n");
printf("\t\t5.删除学生记录\n");
printf("\t\t6.查询学生成绩\n");
printf("\t\t7.修改学生成绩\n");
printf("\t\t0.退出\n");
printf("\t*********************************************\n");
printf("\n");
printf("给出你的选择(0-7):
");
a=getchar();
}while(a<'0'||a>'7');
return(a);
}
voidinput()/*定义输入函数*/
{inti;
charc;
voidmenu();
FILE*fp;
if((fp=fopen("studentmessage","w"))==NULL)
{printf("cannotopenthefile\n");
exit(0);}
printf("学号姓名分数(需要终止输入时请在该行结尾输入n)\n");
for(i=0;;i++)
{scanf("%s%s%d",stu[i].num,stu[i].name,&stu[i].score);
fwrite(&stu[i],sizeof(structstudent),1,fp);
c=getchar();
if(c=='n')
break;
}
n=i+1;
fclose(fp);
system("pause");
menu();
}
voiddisplay()/*定义显示函数*/
{inti;
voidmenu();
FILE*fp;
if((fp=fopen("studentmessage","r"))==NULL)
{printf("cannotopenthefile\n");
exit(0);}
printf("\t学号\t姓名\t分数\n");
for(i=0;i{fread(&stu[i],sizeof(structstudent),1,fp);
printf("\t%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);}
fclose(fp);
system("pause");
menu();
}
voidsort()/*定义排序函数*/
{inti,j;
structstudenttemp;
voidmenu();
FILE*fp;
if((fp=fopen("studentmessage","r"))==NULL)
{printf("cannotopenthefile:
\n");
exit(0);}
for(i=0;ifread(&stu[i],sizeof(structstudent),1,fp);
for(j=0;jfor(i=0;iif(stu[i].score{temp=stu[i];
stu[i]=stu[i+1];
stu[i+1]=temp;
}
for(i=0;iprintf("\t%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);
fclose(fp);
system("pause");
menu();
}
voidinsert()/*定义插入函数*/
{inti;
structstudentst;
voidmenu();
FILE*fp;
if((fp=fopen("studentmessage","a"))==NULL)
{printf("cannotopenthefile:
\n");
exit(0);}
for(i=0;ifread(&stu[i],sizeof(structstudent),1,fp);
printf("输入要插入学生的信息:
\n");
printf("学号:
");
scanf("%s",st.num);
printf("姓名:
");
scanf("%s",st.name);
printf("分数:
");
scanf("%d",&st.score);
n++;
fwrite(&st,sizeof(structstudent),1,fp);
fclose(fp);
system("pause");
menu();
}
voiddelet()/*定义删除函数*/
{inti,t;
charname[10];
voidmenu();
FILE*fp,*fp1;
if((fp=fopen("studentmessage","r"))==NULL)
{printf("cannotopenfile!
\n");
exit(0);}
for(i=0;ifread(&stu[i],sizeof(structstudent),1,fp);
if((fp1=fopen("studentmessage","w"))==NULL)
{printf("cannotopenfile!
\n");
exit(0);}
printf("请输入要删除学生的姓名:
");
scanf("%s",name);
for(i=0;iif(strcmp(stu[i].name,name)==0)
t=i;
for(i=0;ifwrite(&stu[i],sizeof(structstudent),1,fp1);
for(i=t+1;ifwrite(&stu[i],sizeof(structstudent),1,fp1);
printf("该学生信息已删除!
\n\n");
fclose(fp);
fclose(fp1);
system("pause");
menu();
}
voidquery()/*定义查询函数*/
{inti;
chara[10];
voidmenu();
FILE*fp;
if((fp=fopen("studentmessage","r"))==NULL)
{printf("cannotopenfile\n");
exit(0);}
for(i=0;ifread(&stu[i],sizeof(structstudent),1,fp);
printf("输入要查询学生的姓名:
");
scanf("%s",a);
for(i=0;iif(strcmp(stu[i].name,a)==0)
printf("\t%s\t%s\t%d\n",stu[i].num,stu[i].name,stu[i].score);
fclose(fp);
system("pause");
menu();
}
voidrevise()/*定义修改函数*/
{inti,t;
charname[10];
voidmenu();
FILE*fp,*fp1;
if((fp=fopen("studentmessage","r"))==NULL)
{printf("cannotopenfile\n");
exit(0);}
for(i=0;ifread(&stu[i],sizeof(structstudent),1,fp);
if((fp1=fopen("studentmessage","w"))==NULL)
{printf("cannotopenfile!
\n");
exit(0);}
printf("请输入要修改学生的姓名:
");
scanf("%s",name);
for(i=0;iif(strcmp(stu[i].name,name)==0)
t=i;
printf("依次输入要修改学生的学号、姓名、分数:
");
scanf("%s%s%d",stu[t].num,stu[t].name,&stu[t].score);
for(i=0;ifwrite(&stu[i],sizeof(structstudent),1,fp1);
printf("该学生信息已修改成功!
");
fclose(fp);
fclose(fp1);
system("pause");
menu();
}
voidquite()/*退出*/
{printf("再见!
!
!
\n\n");}
voidmenu()/*定义菜单函数*/
{switch(menu_select())
{case'1':
input();break;
case'2':
display();break;
case'3':
sort();break;
case'4':
insert();break;
case'5':
delet();break;
case'6':
query();break;
case'7':
revise();break;
case'0':
quite();break;
}
}
voidmain()/*主函数*/
{menu();}
六、总结及自我评价
经过两个多星期C语言的课程设计,感觉自己收获不少!
我做的课程设计内容是编写一个学生成绩管理系统,对于刚开始看到题目的时候不知道从哪开始写。
在看到函数调用这一章时,我知道了一个大程序实际上是有多个函数经主函数调用来实现的,这也就是C语言的结构化模块设计思想。
七、参考文献
《C语言程序设计教程》谭浩强著清华大学出版社
《C语言课程设计实训教程》石小玲著机械工业出版社