c语言课程设计报告学生学籍信息管理系统.docx
- 文档编号:4935932
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:17
- 大小:90.31KB
c语言课程设计报告学生学籍信息管理系统.docx
《c语言课程设计报告学生学籍信息管理系统.docx》由会员分享,可在线阅读,更多相关《c语言课程设计报告学生学籍信息管理系统.docx(17页珍藏版)》请在冰豆网上搜索。
c语言课程设计报告学生学籍信息管理系统
课程设计报告
一、需求分析
本课题选择了课题
用数据文件存放学生的学籍,可对学生学籍进行注册,登录,修改,删除,查找,统计,学籍变化等操作。
通过审题,我们可以初步了解,本课题需要达到以下要求:
登记学生的相关信息,包括但不仅限于姓名,学号,性别等;删除或查找某学生的信息;按学号,专业,输出学生信息;查询学生学籍的状态。
通过题面,我初步判断需要用到结构体,enum枚举类型函数,指针,函数调用,文件的存储,建立数组,比较,链表等相关知识。
二、总体设计
拿到课题,先对课题进行初步分析,并可得出,本课题需要先建立多组函数,来完成输入,查询,删除等操作,并建立一个菜单,然后再菜单内通过调用前面的函数来完成相关操作,并且菜界面内设定一定的引导。
程序的大致结构为9-24行为设定一个关于性别和学籍状态的enum函数,26-37行为建立结构体,41-172行为设定各种函数来完成学生相关信息的处理,即存储,查询,修改等,174-347行为菜单界面的建立,以及对于前面函数的调用,349-354为主函数。
本程序中最大的难题在于对于菜单的建立,链表的建立以及使用,文件的使用。
因为上述都是第一次使用的知识点,掌握并不熟练,并缺乏一些详细的认知。
使用链表的目的是为了利用链表不需要设定大小的优点。
而在菜单建立部分,提示语以及函数的调用是最大的困难点,对于我关于函数类型的使用要求更高
为解决以上问题通过查阅书籍,网络搜索,以及与同学的讨论。
本次课程设计的过程首先是进行对课题的了解与分析,然后对程序进行初步的设计,对于需要的函数或者知识点进行学习,最后对函数经行补充,最后进行程序的试运行,并经行补充完善。
三、详细设计
1、struct_student——建立结构体;
2、enum——枚举类型函数;
3、registerStudent——注册一个新学生;
4、findStudent——查找某学生;
5、modifyStudent——更改学生信息;
6、deleteStudent——删除某学生信息;
7、getStudent——通过指针找到某学生;
8、putStudent——存储信息
9、putAll——存储全部
10、menuMain——主菜单;
11、sortByNumber——学号排序;
12、sortByMajor——专业排序;
13、splash——建立起始界面;
14、menuRegister——输入学生的子菜单;
15、menuModify——修改学生信息的子菜单;
16、menuDelete——删除学生信息的子菜单;
17、menuSearch——查找学生的子菜单;
18、menuAllByNumber——按学号展示全部学生信息;
19、menuAllByMajor——按专业展示全部学生信息;
20、menuStatus——查询某学生的状态;
21、menuQuit——退出并保存;
四、程序运行结果测试与分析
编译并运行程序
出现以上界面并按回车键
出现设定好的主菜单
出现此界面,可以通过此界面输入学生相关信息,键入学生信息后返回主界面,输入2
即可对信息进行修改,后回到主界面键入3
即可在此界面删除某同学信息,回到主菜单键入4
即可在此界面中按学号查找某同学,返回主界面键入5
即可得到按学号排序的信息,返回主界面键入6
为按学科排列,返回主界面键入7
最后返回键入8
保存并退出程序
五、结果与心得
在本次课题设计中,我全程担任程序的设计与完善和课程设计报告的书写。
程序的书写中,由于是第一次进行菜单和链表的书写,所以在书写的过程中有大量的不严谨不合理,尤其是在子菜单的书写上,输入数据和调用函数这一部分,enum函数也是第一次使用。
以上问题在和同学的讨论后得到了一部分解决。
由于时间关系,本程序存在一些问题,目前还没有得到完全解决,比如会出现可能子菜单操作后一闪而过直接回到主菜单的情况。
个人觉得本程序的功能没有完全合理的设计,对于程序还缺乏进一步的优化与完善。
六、源代码
#include
#include
#include
#defineclrscr()system("cls")
#definepause()system("PAUSE>nul")
typedefcharString[64];
typedefenum{
Enrolled=1,ChangingMajor,Disenrolled,Retarded,Suspended,Graduated,Unknown=0
}Status;
StringStatusStr[]={"Unknown","Enrolled","ChangingMajor","Disenrolled","Retarded","Suspended","Graduated"};
Statusstoe(Strings){
for(inti=0;i<7;i++){
if(strcmp(StatusStr[i],s)==0)return(Status)i;
}
returnUnknown;
}
typedefenum{
Male,Female
}Gender;
typedefstruct_student{
Stringnumber;
Stringname;
Gendergender;
intage;
StringnativePlace;
Stringdepartment;
Stringmajor;
StringclassName;
Statusstatus;
struct_student*pNext;
}Student;
Student*students;
intfindStudent(Stringnumber){
Student*cur=students;
intcount=0;
while(cur!
=NULL){
if(strcmp(cur->number,number)==0)returncount;
cur=cur->pNext;
count++;
}
return-1;
}
intregisterStudent(Stringnumber,Stringname,Gendergender,intage,StringnativePlace,Stringdepartment,Stringmajor,StringclassName,Statusstatus){
if(findStudent(number)!
=-1)return-1;
Student*s=(Student*)malloc(sizeof(Student));
s->gender=gender;
s->status=status;
s->age=age;
s->pNext=NULL;
strcpy(s->number,number);
strcpy(s->name,name);
strcpy(s->nativePlace,nativePlace);
strcpy(s->department,department);
strcpy(s->major,major);
strcpy(s->className,className);
Student*cur=students;
if(cur==NULL)
students=s;
else{
while(cur->pNext!
=NULL){
cur=cur->pNext;
}
cur->pNext=s;
}
return0;
}
intmodifyStudent(Stringnumber,Stringname,Gendergender,intage,StringnativePlace,Stringdepartment,Stringmajor,StringclassName,Statusstatus){
Student*cur=students;
intcount=findStudent(number);
if(count==-1)return-1;
for(inti=0;i cur=cur->pNext; } cur->gender=gender; cur->status=status; cur->age=age; strcpy(cur->number,number); strcpy(cur->name,name); strcpy(cur->nativePlace,nativePlace); strcpy(cur->department,department); strcpy(cur->major,major); strcpy(cur->className,className); return0; } intdeleteStudent(Stringnumber){ Student*cur=students; intcount=findStudent(number); if(count==-1)return-1; if(count==0){ students=cur->pNext; return0; } for(inti=0;i cur->pNext=cur->pNext->pNext; return0; } Student*getStudent(Stringnumber){ Student*cur=students; intcount=findStudent(number); if(count==-1)returnNULL; for(inti=0;i cur=cur->pNext; } returncur; } voidputStudent(Student*s,FILE*f){ fprintf(f,"(%s)%s: \n",s->number,s->name); fprintf(f,"Gender: %s\n",s->gender==Male? "Male": "Female"); fprintf(f,"Age: %d\n",s->age); fprintf(f,"NativePlace: %s\n",s->nativePlace); fprintf(f,"Dept: %s\n",s->department); fprintf(f,"Major: %s\n",s->major); fprintf(f,"Class: %s\n",s->className); fprintf(f,"Status: %s\n\n",StatusStr[s->status]); } voidputAll(FILE*stream){ Student*cur=students; while(cur! =NULL){ putStudent(cur,stream); cur=cur->pNext; } } voidsortByNumber(){ Student*n=NULL; while(students! =NULL){ Student*cur=students; Student*min=students; while(cur! =NULL){ if(strcmp(min->number,cur->number)>0){ min=cur; } cur=cur->pNext; } deleteStudent(min->number); min->pNext=NULL; Student*ncur=n; if(ncur==NULL) n=min; else{ while(ncur->pNext! =NULL){ ncur=ncur->pNext; } ncur->pNext=min; } } students=n; } voidsortByMajor(){ Student*n=NULL; while(students! =NULL){ Student*cur=students; Student*min=students; while(cur! =NULL){ if(strcmp(min->major,cur->major)>0){ min=cur; } cur=cur->pNext; } deleteStudent(min->number); min->pNext=NULL; Student*ncur=n; if(ncur==NULL) n=min; else{ while(ncur->pNext! =NULL){ ncur=ncur->pNext; } ncur->pNext=min; } } students=n; } voidsplash(){ clrscr(); puts("\n\n"); puts("\t\t###################################################"); puts("\t\t#WelcomeToStudentEnrollmentManagementSystem#"); puts("\t\t##"); puts("\t\t#InThisSystem,YouMayManageStudents'#"); puts("\t\t#EnrollmentStatus,SuchAsRegistering,#"); puts("\t\t#Modifying,DeletingAndDoingBasicStatistics#"); puts("\t\t#ThisSystemProvidesADialogue-BasedMenu#"); puts("\t\t##"); puts("\t\t#PressAnyKeyToContinue...#"); puts("\t\t###################################################"); pause(); } voidmenuRegister(){ clrscr(); puts("PleaseInputNumber,Name,Gender,Age,NativePlace,Department,Major,Class,Status.SeparateBySpace,EndWithAnyKey"); StringNumber,Name,GenderStr,NativePlace,Department,Major,Class,statusStr; intage; scanf("%s%s%s%d%s%s%s%s%s",Number,Name,GenderStr,&age,NativePlace,Department,Major,Class,statusStr); if(registerStudent(Number,Name,strupr(GenderStr)=="MALE"? Male: Female,age,NativePlace,Department,Major,Class,stoe(statusStr))==-1){ puts("StudentExist! \n"); puts("PressAnyKeyToMainMenu"); fflush(stdin); pause(); } } voidmenuModify(){ clrscr(); puts("PleaseInputNumber,Name,Gender,Age,NativePlace,Department,Major,Class,Status.SeparateBySpace,EndWithAnyKey"); StringNumber,Name,GenderStr,NativePlace,Department,Major,Class,StatusStr; intage; scanf("%s%s%s%d%s%s%s%s%s",Number,Name,GenderStr,age,NativePlace,Department,Major,Class,StatusStr); if(modifyStudent(Number,Name,strupr(GenderStr)=="male"? Male: Female,age,NativePlace,Department,Major,Class,stoe(StatusStr))==-1){ puts("StudentDoesn'tExist! \n"); puts("PressAnyKeyToMainMenu"); fflush(stdin); pause(); } } voidmenuDelete(){ clrscr(); printf("PleaseInputNumber: "); StringNumber; scanf("%s",Number); if(deleteStudent(Number)==-1){ puts("StudentDoesn'tExist! \n"); puts("PressAnyKeyToMainMenu"); fflush(stdin); pause(); } } voidmenuSearch(){ clrscr(); printf("PleaseInputNumber: "); StringNumber; scanf("%s",Number); Student*s=getStudent(Number); if(s==NULL){ puts("StudentDoesn'tExist! \n"); puts("PressAnyKeyToMainMenu"); fflush(stdin); pause(); return; } putStudent(s,stdout); puts("PressAnyKeyToMainMenu"); fflush(stdin); pause(); } voidmenuAllByNumber(){ clrscr(); sortByNumber(); putAll(stdout); puts("\nPressAnyKeyToMainMenu"); fflush(stdin); system("pause>nul"); } voidmenuAllByMajor(){ clrscr(); sortByMajor(); putAll(stdout); puts("\nPressAnyKeyToMainMenu"); fflush(stdin); pause(); } voidmenuStatus(){ clrscr(); printf("PleaseInputNumber: "); StringNumber; scanf("%s",Number); Student*s=getStudent(Number); if(s==NULL){ puts("StudentDoesn'tExist! \n"); puts("PressAnyKeyToMainMenu"); pause(); return; } printf("EnrollmentStatusForStudentNo.%s: %s",s->number,StatusStr[s->status]); } voidmenuQuit(){ clrscr(); printf("AreYouSureToQuit? (Y/N,Default=N)"); charresponse; scanf("%c",&response); if(response! ='y'&&response! ='Y')return; printf("SaveCurrentDatatoFile? (Y/N,Default=Y)"); scanf("%c",&response); if(response! ='n'&&response! ='N'){ printf("FileName: "); StringfileName; scanf("%s",fileName); FILE*f=fopen(fileName,"w"); putAll(f); fclose(f); printf("DataSavedto\"%s\"\n",fileName); } exit(0); } voidmenuMain(){ students=NULL; while (1){ clrscr(); puts("StudentEnrollmentManagementSystem\n"); puts("1.RegisterNewStudent\n"); puts("2.ModifyExistingStudent\n"); puts("3.DeleteExistingStudent\n"); puts("4.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 学生 学籍 信息管理 系统