欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    C语言课程设计:学-生-管-理-系-统——学生成绩管理系统(共17页).doc

    • 资源ID:15114161       资源大小:330.50KB        全文页数:17页
    • 资源格式: DOC        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    C语言课程设计:学-生-管-理-系-统——学生成绩管理系统(共17页).doc

    精选优质文档-倾情为你奉上淮北师范大学程序设计课程设计学 生 管 理 系 统 学生成绩管理系统学 院 计算机科学与技术 专 业 计算机科学与技术(师范) 学 号 * 学 生 姓 名 * * * 指导教师姓名 * * * 2010年12月 28 日专心-专注-专业一、设计目的与内容(1)实验目的l 进一步巩固和复习C程序设计的基础知识。l 培养学生结构化程序、模块化程序设计的方法和能力。l 提高学生调试程序的技巧和软件设计的能力。l 提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。l 了解软件的编制过程。(2)实验内容1) 实现对学生信息的查找、添加、删除、修改、浏览、保存、从文件读取功能。2) 使用结构体对学生信息的存储。3) 使用链表实现对学生信息的查找、添加、删除、修改、浏览等操作。4) 使用文件完成数据的存储与读取,要求每次运行某个模块时将数据读入结构体中,并 提供保存选项,将结构体中的数据保存在文件中。二、算法的基本思想(1)数据结构 学生成绩信息:typedef struct studentscore char name10; /定义姓名的字符数组 char num20; /定义学号的字符数组struct subjectchar subname20;/定义学科名的字符数组float score; /保存学生各科成绩sub5; /共五门课 double sum; /总分struct studentscore *next;STUCORE;(2)本系统涉及的知识点结构体、数组、循环、函数、指针、链表、文件操作。(3)功能要求功能模块1、建立学生信息,每个学生的信息包括:学号、姓名、性别、班级、学院2、用链表的形式对学生信息分别进行查找、添加、删除、修改3、结果保存在磁盘上(4)功能模块学生管理系统1.文件操作2.学生基本信息管理3.学生成绩信息管理4.退出文件操作1.从文件中读取信息2.学生信息存入文件3.返回学生成绩信息管理1. 查找成绩信息2. 添加成绩信息3. 删除成绩信息4. 修改成绩信息5. 返回修改成绩信息删除成绩信息添加成绩信息查找成绩信息1.按学号查找2.按姓名查找3.返回学生信息存入文件1保存学生基本信息2保存学生成绩信息从文件中读取信息1读取学生基本信息2读取学生成绩信息(4)算法功能描述总体功能说明:本系统可以做到对1.学生信息:学号、姓名、性别、学院、班级。2.学生成绩信息:学号、姓名、一名学生五门不同学科的学科名及该科成绩。分别进行添加、修改、查找、删除、保存、载入功能。学生成绩信息管理功能说明:可以添加学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。并可以通过对输入的学生成绩信息进行修改、删除、保存、载入功能并通过学号和姓名两种方式查找,并且对同名的学生也可以进行区分。并且会保持学好的一致性,保证任意两名学生不会出现学号相重复的情况。三、主要功能模块流程图(按姓名查找信息的流程图)StartScanf(“%s”,no) if(strcmp(p->name,no)=0) while(p!=NULL) 0 1Printf(“查无此人”) Printf(“所有信息”) END 按姓名查找流程图四、 系统测试1.主程序界面首先进入1.文件管理操作。建立单链表。2.文件管理操作选择读取的文件(第一次运行时因文件未建立只有在读取文件后才能执行保存文件)读入文件后就可选择进入的系统。选择2进入学生基本信息管理系统;选择3进入学生成绩信息管理系统。3.学生成绩信息管理选择1:查询成绩信息。选择2:添加成绩信息。选择3:删除成绩信息。选择4:修改成绩信息。选择5:返回。A. 查询成绩信息选择1:按学号查询成绩信息。选择2:按姓名查询成绩信息。可以查找到同名学生的信息。B. 添加成绩信息如图添加学生成绩信息。继续添加输入y否则输入n。添加完成后请去往文件管理保存!C. 删除成绩信息如图删除学生基本信息。继续删除其它学生输入y否则输入n。删除完成后请去往文件管理保存!D. 修改成绩信息如图修改学生基本信息。继续修改其它学生输入y否则输入n。修改完成后请去往文件管理保存!五、 结论通过这次课程设计,我感觉到要真正做出一个程序并不很容易,但只要用心去做,总会有收获,特别是当我遇到 一个问题,想办法去解决,最后终于找到方法时,心里的那份喜悦之情真是难以形容。编写程序中遇到问题再所难免,应耐心探究其中的原因,从出现问题的地方起,并联系前后程序,仔细推敲,逐个排查。直到最终搞清为止。我对于链表也有了更深层次的理解,尤其是采用动态内存分配malloc函数的使用。但我的程序仍让不够完美,因为我修改信息时还不能对学号进行判断,就是说如果修改时使两个学生学号相同就一并保存下来。在查询中可以一并查询出来,但删除修改操作需要按录入顺序捉个操作。这是该程序的不足。而且,在姓名查找中必不能实现模糊查找功能。也就是说,不能对某同学姓名中的一部分进行判断进而进行查找。这次课程设计能够顺利完成要首先感谢韩玲老师对我的悉心教导,她在我整个编程中给予了我很大帮助。还感谢王保华老师为我解释了查询中链表的循环,陈美荣老师为我讲解了动态内存分配malloc函数。在此我要感谢所有为我的课程设计付出心血的老师们!参考文献:谭浩强,C程序设计(第二版),清华大学出版社。严蔚敏,吴伟民,数据结构(C语言版),清华大学出版社。六、 源程序及系统文件使用说明学生成绩信息管理中各模块的功能说明程序代码设计一:结构体:typedef struct studentscore char name10; char num20;struct subjectchar subname20;float score; sub5; /保存学生各科成绩double sum; /总分struct studentscore *next;STUCORE;二:添加学生成绩信息函数:(void add_score())1)函数原形:void add_score()2)功 能:采用动态内存分配malloc函数和链表结构。利用do while、while循环结构strcpy函数依次输入学生学号、姓名、及对一名学生五门不同学科的学科名及该科成绩。将信息保存在内存中建立的链表里。3)变量及类型: STUCORE *stu,*p; 定义结构体指针 char k; 用来接收输入的(y/n)以便通过do while判断是否继续添加信息int flag; 定义一个整型变量来判断所添加的学生学号是否已经存在文件中,保证学号唯一性 p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完输入函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。添加完成后需要去往文件操作保存。void add_score()/添加学生成绩信息STUCORE *stu,*p;char k;p=head_2; int flag=0; dostu=( STUCORE *) malloc(sizeof(STUCORE);printf("输入学生的成绩信息:n");while(flag=0)printf("请输入学生学号:");scanf("%s",no);flag=Judge(no);strcpy(stu->num,no);printf("请输入学生姓名:");scanf("%s",stu->name); printf("请输入第一门课学科名:");scanf("%s",stu->sub0.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub0.score);printf("请输入第二门课学科名:");scanf("%s",stu->sub1.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub1.score);printf("请输入第三门课学科名:");scanf("%s",stu->sub2.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub2.score);printf("请输入第四门课学科名:");scanf("%s",stu->sub3.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub3.score);printf("请输入第五门课学科名:");scanf("%s",stu->sub4.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub4.score);stu->sum=stu->sub1.score+stu->sub2.score+stu->sub3.score+stu->sub4.score+stu->sub0.score;getchar();printf("tt输入学生信息完成。n");while(p->next!=NULL)p=p->next;p->next=stu;p=stu;p->next=NULL;printf("n添加完成后请去往文件管理保存!nn是否继续添加学生信息?(y/n):n"); while(k=getchar()='y');getchar(); system("cls");三:删除学生成绩信息函数(void del_score())1)函数原形:void del_score()2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要删除的学生并利用链表执行删除操作。将信息保存在内存中建立的链表里。3)变量及类型: STUCORE *p,*q; 定义结构体指针 char no10; 定义输入的待比较变量 char k,ch; 用来接收输入的(y/n)以便通过do while判断是否删除信息p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完删除函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。删除完成后需要去往文件操作保存。void del_score()/删除学生成绩信息 STUCORE *p,*q;char no10;char k,ch; Do p=head_2;printf("tt删除学生的详细资料 nnn"); printf("请输入要删除学生的学号:");scanf("%s",no); while(strcmp(p->num,no)!=0&&p->next!=NULL) q=p; p=p->next; if(strcmp(p->num),no)=0)printf("要删除的学生成绩信息:");printf("学号:%sn",p->num);printf("姓名:%sn",p->name);printf("%s 成绩: %fn",p->sub0.subname,p->sub0.score);printf("%s 成绩: %fn",p->sub1.subname,p->sub1.score);printf("%s 成绩: %fn",p->sub2.subname,p->sub2.score);printf("%s 成绩: %fn",p->sub3.subname,p->sub3.score);printf("%s 成绩: %fn",p->sub4.subname,p->sub4.score);printf("总分:%lfn",p->sum);getchar();printf("n确定删除吗?y/n?nn");ch=getchar();if(ch='y')q->next=p->next;printf("nttt已删除该学生nn");else printf("nttt没有该学生nn");getchar(); printf("n删除完成后请去往文件管理保存!nn是否继续删除其它学生信息?(y/n?):n");k=getchar();while(k='y');getchar();system("cls");四:修改学生成绩信息函数(void modify_score())1)函数原形:void modify_score()2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要修改的学生并利用链表执行修改操作。并将修改后的信息保存在内存中建立的链表里。3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k; 用来接收输入的(y/n)以便通过do while判断是否继续修改信息p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完修改函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。修改完成后需要去往文件操作保存。void modify_score()/修改学生成绩信息system("cls");STUCORE *p;char no30;char k;dop=head_2;printf("tt修改学生的详细资料n");printf("输入学生学号:");scanf("%s",no);while(strcmp(p->num,no)!=0&&p->next!=NULL) p=p->next;if(strcmp(p->num),no)=0)printf("要修改的学生的详细资料:n");printf("学号:%sn",p->num);printf("姓名:%sn",p->name);printf("%s 成绩: %fn",p->sub0.subname,p->sub0.score);printf("%s 成绩: %fn",p->sub1.subname,p->sub1.score);printf("%s 成绩: %fn",p->sub2.subname,p->sub2.score);printf("%s 成绩: %fn",p->sub3.subname,p->sub3.score);printf("%s 成绩: %fn",p->sub4.subname,p->sub4.score);printf("总分:%lfn",p->sum);printf("ntt*根据提示输入修改后的信息*nn"); printf("输入新的学生的成绩信息:n");printf("请输入新的学生学号:");scanf("%s",p->num);printf("请输入新的学生姓名:");scanf("%s",p->name);printf("请输入第一门课学科名:");scanf("%s",stu->sub0.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub0.score);printf("请输入第二门课学科名:");scanf("%s",stu->sub1.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub1.score);printf("请输入第三门课学科名:");scanf("%s",stu->sub2.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub2.score);printf("请输入第四门课学科名:");scanf("%s",stu->sub3.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub3.score);printf("请输入第五门课学科名:");scanf("%s",stu->sub4.subname);printf("请输入该课成绩:");scanf("%f",&stu->sub4.score);stu->sum=stu->sub1.score+stu->sub2.score+stu->sub3.score+stu->sub4.score+stu->sub0.score;else printf("tt没有此学生信息!nn");getchar();printf("n修改完成后请去往文件管理保存!nn是否继修改学生信息?(y/n):n");k=getchar();while(k='y');getchar();system("cls");五:按学号查找学生成绩信息函数(void search_num())1)函数原形:void search_num()2)功 能:利用strcmp函数、do while、while循环结构通过学号找到要查找的学生并将该学生成绩信息显示出来。3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用学号查询信息int flag; 定义一个整型变量来判断所查找的学生是否存在文件中p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。void search_num()/按学号查找学生成绩信息STUCORE *p;char no10;char k;int flag;dop=head_2;flag=0;printf("请输入要查找学生的学号:");scanf("%s",no);while(p!=NULL)if (strcmp(p->num,no)=0)printf("要查询的学生详细资料:n");printf("学号:%sn",p->num);printf("姓名:%sn",p->name);printf("%s 成绩: %fn",p->sub0.subname,p->sub0.score);printf("%s 成绩: %fn",p->sub1.subname,p->sub1.score);printf("%s 成绩: %fn",p->sub2.subname,p->sub2.score);printf("%s 成绩: %fn",p->sub3.subname,p->sub3.score);printf("%s 成绩: %fn",p->sub4.subname,p->sub4.score);printf("总分:%lfn",p->sum);p=p->next;flag=1;else p=p->next;if(flag=0) printf("nttt没有该学生nn");getchar();printf("n是否继续查找其它学生信息?y/n?n");k=getchar();while(k='y');getchar();printf("ntt查看完毕!按任意键返回");getchar();system("cls");六:按姓名查找学生成绩函数(void search_name ())1)函数原形:void search_name()2)功 能:利用strcmp函数、do while、while循环结构通过姓名找到要查找的学生并将该学生成绩信息显示出来。(包括同名的学生)3)变量及类型: STUCORE *p; 定义结构体指针 char no10; 定义输入的待比较变量 char k;用来接收输入的(y/n)以便通过do while判断是否继续利用姓名查询信息int flag; 定义一个整型变量来判断所查找的学生是否存在文件中p=head_2; 将结构体下定义的头指针head_2赋给p4)说明:执行完查询函数后,会在键盘缓冲区中保存回车键,后面再对字符型变量赋值时,会将缓冲区中的回车键当成数据存入变量中,所以要在某些输入语句后面加getchar()函数。并在函数调用结束时利用system("cls")执行清屏操作。void search_name()/按姓名查找学生成绩STUCORE *p;char no10;char k;int flag;dop=head_2;flag=0;printf("请输入要查找学生的姓名:");scanf("%s",no);while(p!=NULL)if (strcmp(p->name,no)=0)printf("要查询的学生详细资料:n");printf("学号:%sn",p->num);printf("姓名:%sn",p->name);printf("%s 成绩: %fn",p->sub0.subname,p->sub0.score);printf("%s 成绩: %fn",p->sub1.subname,p->sub1.score);printf("%s 成绩: %fn",p->sub2.subname,p->sub2.score);printf("%s 成绩: %fn",p->sub3.subname,p->sub3.score);printf("%s 成绩: %fn",p->sub4.subname,p->sub4.score);printf("总分:%lfn",p->sum);p=p->next;flag=1;else p=p->next;if(flag=0) printf("nttt没有该学生nn");getchar();printf("n是否继续查找其它学生信息?y/n?n");k=getchar();while(k='y');getchar();printf("ntt查看完毕!按任意键返回");getchar();system("cls");七:查找学生成绩信息函数void search_score()/查找学生成绩信息system("cls");int a;printf("tt*n");printf("tt*n");printf("ttt1:按学号查找。n");printf("ttt2:按姓名查找。n");printf("ttt3:退出。n");printf("tt*n");printf("tt*n");printf("ntt输入一个有效的数字,选择你要做的操作:n");scanf("%d",&a);switch(a)case 1:search_num();break;case 2:search_name();break;case 3:score();break;default:printf("ttt错误的菜单选项nn");break;八:学生成绩管理函数void score()/学生成绩管理system("cls");int a;printf("tt*学生管理系统*n");printf("tt*n");printf("ttt1:查找成绩信息。n");printf("ttt2:添加成绩信息。n");printf("ttt3:删除成绩信息。n");printf("ttt4:修改成绩信息。n");printf("ttt5:返回。n");printf("tt*n");printf("tt*n");printf("ntt输入一个有效的数字,选择你要做的操作:n");scanf("%d",&a);switch(a)case 1:search_score();break;case 2:add_score();break;case 3:del_score();break;case 4:modify_score();break;case 5:main();break;default:printf("ttt错误的菜单选项nn");break;九:文件载入函数(void file3(void))1)函数原形:void file3(void)2)功 能:采用动态内存分配malloc函数和链表结构。建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。3)变量及类型:STUCORE *stu,*p; 定义结构体指针FILE *fp; 定义文件指针4)说明:执行操作前一定要先执行void file3(void) 以通过动态内存分配建立打开“student.dat”文件保存数据。并建立头指针为head_2的单链表。void file3(void)/文件载入 STUCORE *stu,*p;FILE *fp;stu=( STUCORE *) malloc(sizeof(STUCORE);if(fp=fopen("student.dat","rb")=NULL) printf("ttt暂无学生信息,请添加!nn");head_2=stu;head_2->next=NULL;else head_2=p=stu;doif(fread(stu,sizeof(STUCORE),1,fp)=1) p->next=stu;p=p->next;stu=( STUCORE *) malloc(sizeof(STUCORE);while(!feof(fp);p->next=NULL;十:文件保存写入函数(void file4(void))1)函数原形:void file4(void)2)功 能:将链表内存中的数据保存写入到“student.dat”文件中。3)变量及类型:STUCORE *stu,*p; 定义结构体指针FILE *fp; 定义文件指针4)说明:执行添加,删除,修改操作后一定要执行void file4(void) 以将链表内存中的数据保存写入到“student.dat”文件中。void file4(void) /文件保存写入STUCORE *p;FILE *fp;if(fp=fopen("student.dat","wb+")=NULL) printf("ttt文件无法正常打开!nn");else p=head_2;dofwrite(p,sizeof(STUCORE),1,fp);p=p->next;while(p!=NULL);fclose(fp);十一:判断学号唯一函数1)函数原形:void search_name()2)功 能:利用while循环结构和if语句通过strcmp比较输入的学号与文件中已经保存过的学号信息,并通过返回(1/0)来选择是否允许该学号添加从而达到学号的唯一性。3)变量及类型: STUCORE *p; 定义结构体指针 p=head_2; 将结构体下定义的头指针head_2赋给pint Judge(char no10)STUCORE *p; p=head_2; while(strcmp(p->num,no)!=0&&p->next!=NULL) p=p->next; if(strcmp(p->num),no)=0) printf("学号输入失败,该学号已存在,请重新输入!n");return (0); return (1);十二:文件管理void file(void)/文件管理 system("cls");int a;printf("tt*文件管理*n");printf("tt*n");printf("ttt1:读取学生信息文件。n");printf("ttt2:学生信息文件保存。n");printf("ttt3:读取学生成绩文件。n");printf("ttt4:学生信息文件保存。n");printf("ttt5:返回。n");printf("tt*n");printf("tt*n");printf("ntt输入一个有效的数字,选择你要做的操作:n");scanf("%d",&a);switch(a)case 1:file1();break;case 2:file2();break;case 3:file3();break;case 4:file4();break;case 5:main();break;default:printf("tt错误的菜单选项");break;十三:主函数void main()/主函数int a;while(1)/无限循环printf("tt*学生管理系统*n");printf("ttt1:文件管理操作。n");printf("ttt2:学生基本信息管理。n");printf("ttt3:学生成绩信息管理。n");printf("ttt4:退出。n");printf("tt*n");printf("ntt输入一个有效的数字,选择你要做的操作:n");scanf("%d",&a);switch(a)case 1:file();break;case 2:message();break;case 3:score();break;case 4:printf("tt退出系统成功nn");exit(0);break;default:printf("ttt错误的菜单选项nn");break;

    注意事项

    本文(C语言课程设计:学-生-管-理-系-统——学生成绩管理系统(共17页).doc)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开