c语言运用----学生成绩管理系统

学生成绩管理系统

这个学生管理系统是我学习c语言两个礼拜后与队友一同写的第一个项目,一个相对比较完整的项目,虽然有很多的不足,有很多的bug,但是相对的功能实现基本可以完成实现。

基本设计:

按钮1
按钮2
按钮3
按钮4
按钮0
密码
按钮1
按钮2
按钮3
按钮4
按钮5
按钮0
登陆入口
管理员登陆
老师登陆
学生登陆
超级管理员登陆
保存退出
超级管理员界面
添加管理员
删除管理员
重置管理员密码
解锁管理员账号
显示所有管理员
退出

上面我只列举了超级管理员的操作流程,还有管理员,老师,学生的信息系统流程由于功能很多,没有一一列在上面。
此项目用C语言编写,运用结构体,函数,头文件将各个功能来连接起来,使用文件来将信息存储起来,然后再各自的函数里分别写各自的功能,完成布置功能的实现,并能够保存管理员,老师,学生的信息。

基本知识点:

在此我也稍微列举一下我所学到的觉得重要的知识点,仅对于我一个小白来说。

  1. 头文件卫士:功能是防止头文件被重复导入,从面增加文件的大小,浪费编译时间。在此项目中,因为需要用到很多的函数,于是我们在头文件中加入了很多函数声明,这样的话我们可以在.c文件中标注#include" "来使用将函数连接起来。
    ifndef FILENAME_H
    #define FILENAME_H
    #endif//FILENAME_H
  2. system(“clear”):清屏
  3. gets和puts:gets可以接受空格而scanf不行,puts和gets的优点在于编译后代码少, 相对占用内存也小, 从而提高了速度,。
  4. strcpy和strcmp:都是在string.h头文件中的函数,与字符串相关,前者是复制,后者是拷贝。
  5. typedef struct 结构名{ }结构名;
  6. 文件的打开:
    FILE *fopen(const char *path, const char *mode);
    功能:打开或创建一个文件
    path:文件的路径
    mode:打开文件的方式
    “w” 以只写方式打开文件,文件存在则清空,不存在则创建。
    “w+” 在w的基础上添加读的权限。
    “r” 以只读方式打开文件,文件存在则打开,文件不存在则返回空。
    “r+” 在r的基础上添加写的权限。
    “a” 以只写方式打开文件,文件存在打开文件,新写入的数据在文件的末尾,不存在则创建。
    “a+” 在a的基础上添加读的权限。
  7. 文件位置指针:
    int fseek(FILE *stream, long offset, int whence);
    功能:调整文件的位置指针
    offset:偏移值,要与whence配合使用。
  8. 文件本文件的读写:
    int fprintf(FILE *stream, const char *format,…);
    功能:向文件中以字符形式写入数据,把数据按照点位符的格式转换成字符串,写入到文件中。
    int fscanf(FILE *stream, const char *format, …);
    功能:从文件中以字符形式读取数据,从文件中读取字符串,再按照点位符的格式转换化数据。
  9. 二进制文件的读写:
    size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);
    功能:从stream文件中读取size个字节,读取nmemb次,存储在ptr中。
    返回值:成功读取到的次数。
    size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE stream);
  10. 隐藏密码。
//作者:watchman_Xu
//时间:2018.12

#include<stdio.h>
#include<string.h>
#include "struct.h"
#include"tool.h"
#include"supermanager.h"
//增加管理员
void add_manager(void)
{
	system("clear");
	if(ma_count!=0)
	{
	ma[ma_count].ma_num=ma[ma_count-1].ma_num+1;
	}
	strcpy(ma[ma_count].password,"000000");
	puts("请输入姓名");
	gets(ma[ma_count].name);
	puts("添加管理员信息成功");
	ma_count++;
	anykey_continue();
}	
//删除管理员
void del_manager(void)
{	
	char str[20]={};
	system("clear");
	printf("请输入要删除的管理员的姓名\n");
	gets(str);
	for(int j=0;j<ma_count;j++)
	{
		if(strcmp(ma[j].name,str)==0 && ma[j].index!=1)
		{
			ma[j].index=1;
			printf("已删除此人\n");
			anykey_continue();
			return;
		}
	}
	printf("没有此人\n");
	anykey_continue();
}	 
//重置管理员密码
void reset_manager(void)
{
	system("clear");
	printf("请输入你要重置的管理员的姓名:\n");
	char str[20]={};
	gets(str);
	for(int i=0;i<ma_count;i++)
	{
		if(strcmp(ma[i].name,str)==0 && ma[i].index!=1)
		{
			strcpy(ma[i].password,"123456");
			puts("重置成功");
			anykey_continue();
			return ;
		}
		
	}
	anykey_continue();
} 
//解锁管理员账号
void unlock_manager(void )
{
	system("clear");
	printf("请输入你要解锁的管理员的名字:\n");
	char str[20]={};
	gets(str);
	for(int i=0;i<ma_count;i++)
	{
		if(strcmp(ma[i].name,str)==0 && ma[i].index!=1)
		{
			ma[i].lock=0;
			puts("解锁成功");
			anykey_continue();
			return ;
		}
		
	}
	anykey_continue();

不足之处和收获:

不足的地方有很多,比如超级管理员如果忘记密码之后的功能改如何实现,刚开始写的时候非常的简单,写的也很快,最开始的版本我还使用了goto,因为我考虑到如果需要删除的人数不只有一个,所以我使用if然后进行判断是否要继续,在通过goto回到原来的函数遍历中,后来在队友的帮助提醒下看到其实可以这样写,代码简单而且效率高,对于小白的我来说,简简单单的一段代码对于我来说最后完成还需要很多的修改,特别是忘记;{}等等问题的存在,所以小组分工完成我觉得是我们在未来接触社会前的练习,我们可以去读懂别人的代码并汲取他人的长处,他人在写其他代码的优点,也锻炼了我们的团队配合问题,对于我来说,可能在项目中做出的贡献会是最少的,但是我的收获一定是最大的,因为我需要去学习的地方很多,渐渐的从小白开始启航。
这是我写超级管理员的一段代码,我觉得c语言,c++,嵌入式一步一步的深入,对我来说任重而道远,前路漫漫,革命尚未成功,同志仍须努力。hahahahhah。。。。。。。。

猜你喜欢

转载自blog.csdn.net/weixin_43857600/article/details/84946259
今日推荐