C语言课设之学生学籍管理系统.docx
《C语言课设之学生学籍管理系统.docx》由会员分享,可在线阅读,更多相关《C语言课设之学生学籍管理系统.docx(13页珍藏版)》请在冰点文库上搜索。
![C语言课设之学生学籍管理系统.docx](https://file1.bingdoc.com/fileroot1/2023-7/20/806f6296-7dd8-4177-ad6b-2a476c8558d7/806f6296-7dd8-4177-ad6b-2a476c8558d71.gif)
C语言课设之学生学籍管理系统
题目:
学生学籍管理系统
目录:
一.个人简介。
二.报告摘要。
三.报告目录。
四.报告正文。
1、系统需求分析
2、系统总体设计
3、系统详细设计
六.总结。
二.报告摘要
这个C语言课程设计是关于学生学籍管理系统的设计,题目要求能够录入数据,查询,删除和排序的功能。
报告依次以主函数板块、数据录入板块、查询板块、删除板块、排序板块的顺序进行。
三.报告目录
1主函数
2数据录入
3查询
4删除
5排序
四.报告正文
1系统需求分析
根据题目需求,在程序中要求浏览学生的信息,应该提供数据录入、查询、删除、排序的操作。
题目要求实得成绩、实得学分根据条件自动运算,应该提供求综合成绩和实得学分的算法,另外还应该提供键盘式选择菜单实现功能选择。
2系统总体设计
数据录入
数据查询
删除数据
数据排序
3系统详细设计
(1)主函数
负责提供输入、处理和输出部分的函数调用,其中各功能模块用菜单方式选择。
程序:
voidmenu()
{intn,w;
do
{
puts("\t\t****************MENU******************\n\n");
puts("\t\t\t\t1.enternewdata-student");
puts("\t\t\t\t2.searchbyname");
puts("\t\t\t\t3.searchbylearnnumber");
puts("\t\t\t\t4.deletedata");
puts("\t\t\t\t5.insertdata");
puts("\t\t\t\t6.enternewdata-sorce");
puts("\t\t\t\t6.exit");
puts("\n\n\t\t************************************\n");
printf("choiceyournumber(1-9):
[]\\b\b");
scanf("%d",&n);
if(n<1||n>9)
{w1=1;getchar();}
elsew1=0;
}while(w1==1);
switch(n)
{case1:
enter();break
case2:
searchbyname();break;
case3:
searchbylearnnumber();break;
case4:
del();break;
case5:
insert():
break;
case6:
exit(0);break;
}
}
main()
{menu();
}
(2)数据录入板块
数据信息中学号、姓名等是字符型,采用字符型数组,分数、号码、等为整数,可以采用整型数组,实得学分可能为小数,采用实型。
采用结构体数组存放学生数据信息到文件。
程序:
/*************************************************/
#defineN10
structstudent
{
intnum;
charname[20];
charsex;
chartel[20];
chardomi[3];
}stu[N];
viodenternewdata-student()
{inti,n;
printf("houmanystudents(0-%d)?
:
",n-1);
for(n=1;n<10;n++)
printf("\nenterdatanow\n\n");
for(i=0;i{printf("\ninput%dthstudentrecord.\n",i+1);
input(i);
}
if(i!
=0)save(n);
printf_back();
}
#defineN10
structcourse
{
intnum;
intcourse_num;
charcoursename[];
intnormalsorce[]
intnormal;\\平时成绩
intlab;\\实验成绩
inttext;\\考试成绩
intture[];\\综合成绩
floatact[];\\实得学分
}cou[N]
voidenternewdata-sorce()
{inti,n,z,c;
floats;
printf("howmanynum(0-%d)?
:
"N-1);
for(n=1;n<10;n++)
printf(\nenterdatanow\n\n");
for(i=0;i{print("\ninput%dthrecord.\n",i+1);
input(i);
}
if(i!
=0)save(n);
printf_back();
if(cou[1].lab==-1)cou[1].true=cou[1].normal*0.3+cou[1].text*0.7;
elsecou[1].true=cou[1].lab*0.15+cou[1].normal*0.15+cou[1].text*0.7;
if(c=100)s=cou[1].normalsorce*1;
elsec=cou[1].text/10;
switch(c)
{case10:
case9:
s=cou[1].normalsorce*0.9;break;
case8:
s=cou[1].normalsorce*0.8;break;
case7:
s=cou[1].normalsorce*0.75;break;
case6:
s=cou[1].normalsorce*0.6;break;
case5:
case4:
case3:
case2:
case1:
case0:
s=0;break;
default:
printf("error\n");}
cou[i].act=s;
}
(3)数据查询
这个模块要求a.输入一个学号或姓名查讯学生的基本信息并显示输出;输入一个宿舍号码,可查出本室所有学生的基本信息并显示输出;c.输入一个学号时,查出此学生所有课程情况。
程序:
/*******************************************************/
Search()
{inti,n,k;
Structstudents;
Structcoursec;
n=load();
do
{
do{k=-1;
printf("\n\nenternamethatyouwanttosearch!
name:
");
scanf("%s",s.name);
printf_face();}
do{n=-1;
Printf("\n\nenterdomithatyouwanttosearch!
domi:
")
scanf("%d",s.domi);
printf_face();}
do{i=-1;
printf("\n\nenternumthatyouwanttosearch!
num");
scanf("%d%c%d%f",c.num,c.coursename,c.ture,c.act);
printf_face();}
}
}
(4)删除数据
题目要求在删除A.TXT中一个学生信息时,B.TXT中相应的信息也要被删除。
程序:
/*********************************************************/
voiddel()
{structstudents
sturctcoursec;
FILE*fp;
inti,n,kw0=1,w1,w2=0;
n=load();
do
{
k=-1;
printf_face();
for(i=0,iif(i!
=0)&&(i%10==0)
{printf("\n\nrememberno.whichneededdelete.Passanykeytocontiune...");
getch()
puts("\n\n");
}
printf_one(i);
}
do
{printf("\n\nenterno.Thatyouwanttodelete!
no.");
scanf("%s",s.num);
for(i=0;iif(strcmp(s.num,stu[i].mum==0))
{k=i;
s=stu[i];
}
[for(i=0,i{if(strcmp(cou[i]==stu[i]))
if(k==-1)printf("\n\nnoexist!
Pleaseagain");
}
while(k==-1);
printf_face();printf_one(k);
w1=delete_data(k,n);
if(w1==1)
Printf("\nsuccessful!
\n\nareyoudeleteanother?
\n\n\t1)yes2)backwithsave\t\b\b");
scanf("%d",&w0);
w2=1;
}
else
{w0=0;
if(w2==1)
stu[k]=s
}
if(w0!
=1&&w2==1)
save(n);
}
while(w0==1);
menu()
}
(5)数据排序
能实现选择按综合成绩或实得学分升序或降序排序并显示数据。
程序:
/*************************************************************/
voidorder()
{inti,j,k;
intm,n,p;
structcourses;
structcoursec;
for(i=0;i<9;i++)
{k=i;
for(j=i+1;j<10;j++)if(cou[j].true>cou[k].true)k=j;
s=cou[i].true;cou[i].true=cou[j].true;cou[j].true=s;
}
for(m=0;m<9;m++)
{p=m
for(n=m+1;n<10;n++)if(cou.act[n]>cou.Act[p])p=n;
c=cou.act[m];cou.act[m]=cou.atc[n];cou.act[n]=c;
}
(6)公共函数//***********************************************************************
voidprintf_face1()//每次要输出文件1数据的时候用到(打印到数据的第一排,提示作用)
{printf("\n学号姓名性别宿舍号码电话号码\n");
}
//***********************************************************************
voidprintf_face()//每次要输出文件2数据的时候用到(打印到数据的第一排,提示作用)
{printf("\n学号课程编号课程名称学分平时成绩实验成绩卷面成绩综合成绩实得分数\n");
}
//***********************************************************************
voidprintf_back()//返回函数
{intw;
printf("\n\n\t数据输入成功^_^\n\n");
printf("选择需要实现的功能\n\n\t1).浏览输入的数据\t2).返回主菜单:
[]\b\b");
scanf("%d",&w);
if(w==1)browse();
elsemenu();
}
//***********************************************************************
intsave(intn)//保存输入的数据到txt文档
{FILE*fp;
inti;
if((fp=fopen("Pro.txt","wb"))==NULL)
{printf("\nCannotopenfile\n");
returnNULL;}
for(i=0;iif(course[i].num!
=0)
if(fwrite(&course[i],sizeof(structcourse),1,fp)!
=1)printf("filewriteerror\n");
fclose(fp);return0;
}
//***********************************************************************
voidno_input(inti,intn)//检查输入数据是否存在以及编号是否正确
{intj,k,w1;
do
{w1=0;
for(j=0;course[i].num[j]!
='\0';j++)//判断输入编号格式是否正确
if(course[i].num[j]>'9')
{puts("Inputerror!
Onlybemadeupof(0-9).Pleasereinput!
\n");
w1=1;break;}
if(w1!
=1)
for(k=0;k=i&&strcmp(course[k].num,course[i].num)==0)//判断此编号是否存在
{puts("Thisrecordisexist.pleasereinput!
\n");}
}while(w1==1);
}