一、课程设计目的:
应用《C语言程序设计》课程的所有知识点,开发一个学生信息管理系统,采用计算机对学生信息进行管理,进一步提高了办学效益和现代化水平.为广大教师和学生提高工作效率,实现学生信息管理工作流程的系统化,规范化和自动化.现在我国的大中专院校的学生信息管理水平普遍都不是很高,有的还停留在全用纸介质基础上,这种管理方式已不能适应时代的发展,社会的需求,因为它浪费了大量的人力物力,也存在着许多不足的因素.在今天信息时代这种传统的管理方法必然会被计算机为基础的信息管理系统所代替.一个高效的学生信息管理系统可以存储历届的学生信息档案,不需要大量的人力,只需要几名专门录入员即可操作系统,节省大量人力,可以迅速查到所需信息,高效,安全,学生在能方便的查看自己的信息。
掌握结构化程序设计的基本方法,基本掌握面向对象程序设计的基本思路和方法。
掌握C的基本概念和基础知识。
通过训练能够读懂较为复杂的C语言源程序并具备基本C语言程序设计的能力。
通过实训,培养自己编写、调试、分析程序的能力。
培养自己独立解决问题,查找资料的能力。同学之间相互帮助,相互交流,相互合作的团队精神。
培养自己良好的学习兴趣,独立的编程风格。
通过课成设计设检查自己学习上的不足,达到熟练掌握C语言的基本知识和技能。
二、课程设计内容
//预编译+代码函数介绍:
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
#include <windows.h>
#pragma warning(disable:4996)
void Home(); //登录界面
int main_1(Node a); //管理员
int main_2(Node a); //教师
int main_3(Node a); //学生
void Home_1(Node a); //管理员界面
void Home_2(Node a); //教师界面
void Home_3(Node a); //学生界面
void Login_1(); //管理员登录
void Login_2(); //教师登录
void Login_3(); //学生登录
void Deposit_1(); //管理员录入
void Deposit_2(); //教师录入
void Deposit_3(); //学生录入
void find_teacher_main(); //找回教师主函数
void find_teacher_Home(); //找回教师目录
void teacher_output(); //教师输出
void teacher_Account(); //找回教师账号
void teacher_Password(); //找回教师密码
LinkList_teacher Make_teacher(); //教师链表创建
void find_student_main(); //学生信息查询主函数
void student_output(); //学生输出
void student_Account(); //学生账号查询
void student_Password(); //学生密码 查询
LinkList_student Make_student(); //学生链表创建
void Delete_student_main(); //删除学生
void Delete_teacher_main(); //删除教师
void Delete_administrator_main(); //删除管理员
LinkList Make_administrator(); //管理员链表创建
void Add_administrator(LinkList frist); //重新拷贝管理员信息
void Add_student(LinkList_student frist); //重新拷贝学生信息
void Delete_teacher_main(); //删除教师信息
void Add_teacher(LinkList_teacher frist); //重新拷贝教师信息
void Delete_teacher_main(); //删除教师信息
void Revise_student_main(); //修改学生密码
void Revise_teacher_main(); //修改教师密码
void Add_student_score(); //录入学生成绩
void Revise_student_score(); //修改学生成绩
void Sort_student_sum(); //对学生总分进行从大到小排序
void Sort_student_China(); //对学生语文进行从大到小排序
void Sort_student_Math(); //对学生高数进行从大到小排序
void Sort_student_English(); //对学生英语进行从大到小排序
void Sort_student_main(); //学生排序主函数
void Sort_student_Home(); //学生排序菜单
void Output_student_China(); //学生语文成绩打印
void Output_student_Math(); //学生高数成绩打印
void Output_student_Sum(); //学生总成绩打印
void Output_student_English(); //学生英语成绩打印
void Revise_administrator_main();
void Output_student_all(Node_student a); //查找学生成绩
void Revise_student_main_1(Node_student a); //学生修改密码
void Revise_teacher_main_1(Node_teacher a); //教师修改密码
void Sort_student_sum_min(); //对学生总分进行从小到大排序
void Sort_student_China_min(); //对学生语文进行从小到大排序
void Sort_student_Math_min(); //对学生高数进行从小到大排序
void Sort_student_English_min(); //对学生英语进行从小到大排序
void teacher_number(); //输出教师总数
void student_number(); //输出学生总数
int panduan(char name[80]); //判断学生账号是否重复,返回1重复,返回0不重复
int panduan_1(char name[80]); //判断教师账号是否重复,返回1重复,返回0不重复
三、设计与实现过程
首先是三个操作连接三个身份登录:
管理员可以进行的操作:
程序中目录:
教师可以进行的操作:
学生进行的操作:
查找的操作有:
排序进行的操作:
其中,登录进行文件指针进行遍历查找判断验证;
添加是将账号,密码,姓名放置在结构体中直接录入到文件中;
查询是运用创建链表遍历进行字符串的判断查找;
删除是对链表进行删除然后将更新后的链表拷入被清空的文件中;
修改是对链表内容进行修改然后将更新后的链表拷入被清空的文件中;
排序使用冒泡排序对链表进行内容上的移动;
文件是文本文档,可以直接排序导出使用;
结构体内容:
typedef struct Administrator //管理员
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
struct Administrator *next; //链表指针域
} Node, * LinkList;
typedef struct teacher //教师
{
int n; //序号
char name[80]; //名字
char Account[80]; //账号
char Password[80]; //密码
struct teacher *next; //链表指针域
}Node_teacher, * LinkList_teacher;
typedef struct student
{
int n; //序号
char name[80]; //姓名
char Account[80]; //账号
char Password[80]; //密码
float Math, Chian, English, Sum; //成绩部分
struct student *next; //链表指针域
}Node_student, * LinkList_student;
四、 设计技巧及体会
经过这次课程设计,我学到了很多东西:
①巩固和加深了对编程的理解,提高综合运用本课程所学知识的能力。
②培养了我选用参考书,查阅手册及文献资料的能力。培养独立思考,深入研究,分析问题、解决问题的能力。
③经过实际编译系统的分析设计、编程调试,掌握应用软件的分析方法和工程设计方法。
④能够按要求编写课程设计报告书,能正确阐述设计和实验结果,正确绘制系统和程序框图。
这次高级语言程序设计,学生成绩管理系统,让我对高级语言有了进一步的认识。首先,想要学好这门课程,主要在于实践,要通过不断地上机操作才能更好的学习它。
之后,课程设计期间,在调试出现很多错误,很多警告的过程中我的知识也在得到不断地巩固;当你把代码输入电脑,并用编译器将其运行,发现通过不了,再来检查找出问题,这是一件非常辛苦的事情,也很浪费时间。于是在课程设计的时候,我花了好几天的时间来规划与写代码,将要实现的内容分析清楚,才把代码输入电脑。我们觉得写程序,应该先找到该程序中的核心地方,用多种方法来实现该核心,这才可能避免等到发现逻辑上或者编译器不支持上的错误,才来想补救的措施,这样花费时间在想补救措施是很不值得的。也让我学到了很多人生的哲理:懂得怎样去制定计划,怎样去实现这个计划,并掌握了在执行过程中怎样去克服心理上的不良情绪。我们对于高级语言的理解和使用还处在一个初级的阶段,我们要想掌握它,要学习的还很多,同时要懂得创新,许多的编程方法都是人们一步一步总结出来的,要努力拓展自己的思维,努力去寻求新的方法,以创造出更为完善的应用程序。
完整源代码:
提示:留有管理员暗门,第一次打开系统可先输入”99“添加管理员
#include<stdio.h>
#include <stdlib.h>
#include<math.h>
#include<string.h>
#include <windows.h>
#pragma warning(disable:4996)
typedef struct Administrator
{
int n;
char name[80];//姓名
char Account[80];//账号
char Password[80];//密码
struct Administrator *next;
} Node, * LinkList;
typedef struct teacher
{
int n;
char name[80];
char Account[80];
char Password[80];
struct teacher *next;
}Node_teacher, * LinkList_teacher;
typedef struct student
{
int n;
char name[80];
char Account[80];
char Password[80];
float Math, Chian, English, Sum;
struct student *next;
}Node_student, * LinkList_student;
void Home(); //登录界面
int main_1(Node a); //管理员
int main_2(Node a); //教师
int main_3(Node a); //学生
void Home_1(Node a); //管理员界面
void Home_2(Node a); //教师界面
void Home_3(Node a); //学生界面
void Login_1(); //管理员登录
void Login_2(); //教师登录
void Login_3(); //学生登录
void Deposit_1(); //管理员录入
void Deposit_2(); //教师录入
void Deposit_3(); //学生录入
void find_teacher_main(); //找回教师主函数
void find_teacher_Home(); //找回教师目录
void teacher_output(); //教师输出
void teacher_Account(); //找回教师账号
void teacher_Password(); //找回教师密码
LinkList_teacher Make_teacher(); //教师链表创建
void find_student_main(); //学生信息查询主函数
void student_output(); //学生输出
void student_Account(); //学生账号查询
void student_Password(); //学生密码 查询
LinkList_student Make_student(); //学生链表创建
void Delete_student_main(); //删除学生
void Delete_teacher_main(); //删除教师
void Delete_administrator_main(); //删除管理员
LinkList Make_administrator(); //管理员链表创建
void Add_administrator(LinkList frist); //重新拷贝管理员信息
void Add_student(LinkList_student frist); //重新拷贝学生信息
void Delete_teacher_main(); //删除教师信息
void Add_teacher(LinkList_teacher frist); //重新拷贝教师信息
void Delete_teacher_main(); //删除教师信息
void Revise_student_main(); //修改学生密码
void Revise_teacher_main(); //修改教师密码
void Add_student_score(); //录入学生成绩
void Revise_student_score(); //修改学生成绩
void Sort_student_sum(); //对学生总分进行从大到小排序
void Sort_student_China(); //对学生语文进行从大到小排序
void Sort_student_Math(); //对学生高数进行从大到小排序
void Sort_student_English(); //对学生英语进行从大到小排序
void Sort_student_main(); //学生排序主函数
void Sort_student_Home(); //学生排序菜单
void Output_student_China(); //学生语文成绩打印
void Output_student_Math(); //学生高数成绩打印
void Output_student_Sum(); //学生总成绩打印
void Output_student_English(); //学生英语成绩打印
void Revise_administrator_main();
void Output_student_all(Node_student a); //查找学生成绩
void Revise_student_main_1(Node_student a); //学生修改密码
void Revise_teacher_main_1(Node_teacher a); //教师修改密码
void Sort_student_sum_min(); //对学生总分进行从小到大排序
void Sort_student_China_min(); //对学生语文进行从小到大排序
void Sort_student_Math_min(); //对学生高数进行从小到大排序
void Sort_student_English_min(); //对学生英语进行从小到大排序
void teacher_number(); //输出教师总数
void student_number(); //输出学生总数
int panduan(char name[80]); //判断学生账号是否重复,返回1重复,返回0不重复
int panduan_1(char name[80]); //判断教师账号是否重复,返回1重复,返回0不重复
int main() //初始界面主函数
{
int n;
for (;;)
{
system("cls");
system("color 8F");
for (;;)
{
Home();
scanf("%d", &n);
switch (n)
{
case 1:Login_1(); break;
case 2:Login_2(); break;
case 3:Login_3(); break;
case 99:Deposit_1(); break;
case 0:return 0; break;
default:printf("\n\a\t\t\t\t\t----------输入错误,重新输入----------\n");
}
getchar();
}
}
}
void Home_3(Node_student a) //学生操作菜单
{
system("cls");
printf("\n\n\n");
printf("\t\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t\t----------欢迎学生%s登录---------\n", a.name);
printf("\t\t\t\t\t----------1、查询成绩--------------\n");
printf("\t\t\t\t\t----------2、修改密码--------------\n");
printf("\t\t\t\t\t----------0、退出学生端------------\n");
printf("\t\t\t\t\t-----------------------------------\n");
}
void Home_2(Node_teacher a) //教师操作菜单
{
system("cls");
printf("\n\n\n");
printf("\t\t\t\t\t-----------------------------------\n");
printf("\t\t\t\t\t----------欢迎老师%s登录--