C++课程设计之C语言函数查询管理系统

C语言函数比较多且丰富,全部记住是不可能的,请设计一个C语言函数查询系统帮助大家快速熟悉和掌握这些函数的用途和使用方法。
要求设计的类中至少包含:函数编号、函数名、函数功能、所在头文件名字、功能类型编号。
要求:
1、读入装有C函数数据的文件;
2、增加新的C语言函数;
3、删除指定的C语言函数;
4、修改指定的C语言函数;
5、查询指定的C语言函数(可以提供两种不同的查询方式);
6、显示功能类型相同的所有C语言函数(例如:查询所有输出函数的列表);
7、显示所有的C语言函数到屏幕上;
8、系统的各个功能模块要求用函数的形式实现;
9、界面友好(良好的人机交互),程序加必要的注释。
在这里插入图片描述

#include<iostream>
#include <fstream>
#include <cstring>
#include<stdlib.h>
using namespace std;

class C_fun {
	friend class C_funOperate;//友元函数
private:
	int C_id;//函数编号
	char C_name[20];//函数名
	string C_function;//函数功能
	string C_head;//头文件
	int C_funID;//功能类型编号

public:
	C_fun* next;

	void input();//输入基本信息
	void ReadFile(ifstream& in);//读取输入信息
	void readC();
};

//1.读入装有C函数的文件
void C_fun::readC() {
	//读文件步骤如下:

	//1. 包含头文件

	//2. 创建流对象

	ifstream ifs;

	//3. 打开文件并判断文件是否打开成功

	ifs.open("C函数查询.txt", ios::in | ios::binary);
	if (!ifs.is_open())
	{
		cout << "文件打开失败" << endl;
		return;
	}
	//4. 读数据

	string buf;
	while (getline(ifs, buf))
	{
		cout << buf << endl;
	}

	//5. 关闭文件

	ifs.close();
}
//2、增加新的C语言函数;
void C_fun::input()
{

	cout << "请输入函数编号:";
	cin >> C_id;

	cout << "请输入函数名:";
	cin >> C_name;

	cout << "请输入函数功能:";
	cin >> C_function;

	cout << "请输入头文件:";
	cin >> C_head;

	cout << "请输入功能类型编号:";
	cin >> C_funID;

	return;
}

void C_fun::ReadFile(ifstream& in)
{
	/*从文档中读取值到结点*/
	in >> C_id >> C_name >> C_function >> C_head >> C_funID ;
	cout << endl;
}

class C_funOperate {
	friend class C_fun;//友元类
private:
	/* C_funOperate类可以看作是以 C_fun类为结点的链表*/
	C_fun* head;  //链表头 
	C_fun* end;	//链表尾 
	ifstream in;
	ofstream out;
public:
	C_funOperate();
	~C_funOperate();
	void menu();//菜单
	void Add_Node();//添加结点
	void Del_node();//删除结点
	void showSame();//显示相同功能函数
	void Display();//显示所有函数
	void Find();//查找特定函数
	void Modify();//修改函数
	void Save();//保存修改信息
	void Clean();//清空函数

};

//构造函数
C_funOperate::C_funOperate()
{
	/*初始化,头尾结点*/
	head = new C_fun;
	head->next = new C_fun;
	end = head->next;
	ifstream in("file.txt"); //原有的学生信息是放在文件file.txt中的 
	/*Important Part!*/
	/*下面很关键,不这样做的话达不到效果。首先要先向文件读一下,才能判断
	文件是否为空,因为eof()不能用来判断文件是否为空,eof()是根据文件的状态标识
	来判断文件是否为空的,当读取文件时,遇到结尾时,系统会改变文件的状态标识
	,这时候才会返回EOF,才能用eof()判断。不先读一下的话,in.eof()是不会返回
	正值的,即使文件为空*/
	char ch = in.get();
	if (in.eof())
	{
		cout << "file is empty" << endl;
	}

	/*若文件非空*/
	while (!in.eof())
	{
		end->ReadFile(in);
		if (end->C_name[0] == '\0')break;  //这里也是比较关键的,不加这一句的话,程序会把文件最后结束的标记也都出来		
		end->next = new C_fun;
		end = end->next;
	}
}
//析构函数
C_funOperate::~C_funOperate()
{
	Save();    //当正常退出程序的时候,保存数据到file.txt中 
	C_fun* pos = head->next;
	C_fun* temp;
	while (pos != end)
	{
		temp = pos;
		pos = pos->next;
		delete temp;
	}
	delete head, end;
}
//显示菜单
void C_funOperate::menu()
{
	cout << endl;
	cout << endl;
	cout << "-----------------------欢迎使用C语言函数查询管理系统-------------------------" << endl;
	cout << "-----------------------------------------------------------------------------" << endl;
	cout << "|------------------ 1、读入装有C函数数据的文件	        -----------------|" << endl;
	cout << "|------------------ 2、增加新的C语言函数		-----------------|" << endl;
	cout << "|------------------ 3、删除指定的C语言函数		-----------------|" << endl;
	cout << "|------------------ 4、修改指定的C语言函数		-----------------|" << endl;
	cout << "|------------------ 5、查询指定的C语言函数		-----------------|" << endl;
	cout << "|------------------ 6、显示功能类型相同的所有C语言函数  -----------------|" << endl;
	cout << "|------------------ 7、显示所有的C语言函数到屏幕上	-----------------|" << endl;
	cout << "|------------------ 0、退出C语言函数查询管理系统        -----------------|" << endl;
	cout << "-----------------------------------------------------------------------------" << endl;
	cout << endl;
	cout << endl;
}
//增加节点
void C_funOperate::Add_Node()
{
	char quit;
	while (1)
	{
		end->input();
		end->next = new C_fun;
		end = end->next;
		cout << "continue or not?,Y/N" << endl;
		cin >> quit;
		switch (quit)
		{
		case'Y':
		case'y':break;
		case'n':
		case'N':return; break;
		default:cout << "error input,again,please..Y/N";
			cin >> quit;
		}
	}
	cout << "add node success!" << endl;
	system("pause");
}
//删除节点
void C_funOperate::Del_node()
{
	int del_flag = 0;
	char name[20];
	if (head->next == end)
	{
		cout << "Empty...." << endl; return;
	}
	cout << "please enter the name you want to delete:";
	cin >> name;
	C_fun* p = head->next;
	C_fun* q = head;
	for (p; p != end; p->next)
	{
		if (strcmp(p->C_name, name) == 0)
		{
			del_flag = 1;
			q->next = p->next;
			delete p;
			break;
		}
		else
		{
			q = q->next;
			p = p->next;
		}
	}
	if (del_flag == 0)
	{
		cout << "Can not Find the name you want." << endl;
	}

	cout << "del node success!" << endl;
	system("pause");
}
void C_funOperate::showSame()
{
	if (head->next == end)
	{
		cout << "Empty..." << endl;
	}
	C_fun* pos;
	pos = head->next;
	cout << "C语言函数功能分类如下:" << endl;
	cout << "--------------------------------------------" << endl;
	cout << "1.数学函数" << endl;
	cout << "2.字符函数" << endl;
	cout << "3.字符串函数" << endl;
	cout << "4.输入输出函数" << endl;
	cout << "5.动态存储分配函数" << endl;
	cout << "6.其他功能函数" << endl;
	cout << "--------------------------------------------" << endl;
	cout << "请输入你要查找的函数功能类型编号:";
	int ID;//功能类型编号
	cin >> ID;
	for (pos; pos != end; pos = pos->next)
	{
		if (ID == pos->C_funID == 1) {
			cout << "数学函数有:" << pos->C_name << endl;
		}
		else if (ID == pos->C_funID == 2) {
			cout << "字符函数有:" << pos->C_name << endl;
		}
		else if (ID == pos->C_funID == 3) {
			cout << "字符串函数有:" << pos->C_name << endl;
		}
		else if (ID == pos->C_funID == 4) {
			cout << "输入输出函数有:" << pos->C_name << endl;
		}
		else if (ID == pos->C_funID == 5) {
			cout << "动态存储分配函数有:" << pos->C_name << endl;
		}
		else if (ID == pos->C_funID == 6) {
			cout << "其他功能函数有:" << pos->C_name << endl;
		}
		else {
			cout << "不存在此函数!" << endl;
		}
	}
	cout << "功能类型相同的所有C语言函数显示完成!" << endl;
	system("pause");
}
//显示结点
void C_funOperate::Display()
{
	if (head->next == end)
	{
		cout << "Empty..." << endl;
	}
	C_fun* pos;
	pos = head->next;
	for (pos; pos != end; pos = pos->next)
	{
		cout << endl;
		cout << "C_id:" << pos->C_id << endl;
		cout << "C_name:" << pos->C_name << endl;
		cout << "C_function:" << pos->C_function << endl;
		cout << "C_head:" << pos->C_head << endl;
		cout << "C_funID:" << pos->C_funID << endl;
		cout << endl;
	}
	system("pause");
}
//查找结点
void C_funOperate::Find()
{
	char name[20];
	cout << "please enter name you want to find:";
	cin >> name;
	C_fun* pos = head->next;
	if (pos == end)
	{
		cout << "C_fun Message is Empty..." << endl;
		return;
	}
	for (pos; pos != end; pos = pos->next)
	{
		if (strcmp(pos->C_name, name) == 0)
		{
			cout << "Find it!" << endl;

			cout << "C_id:" << pos->C_id << endl;
			cout << "C_name:" << pos->C_name << endl;
			cout << "C_function:" << pos->C_function << endl;
			cout << "C_head:" << pos->C_head << endl;
			cout << "C_funID:" << pos->C_funID << endl;

			return;
		}
	}
	cout << "Can not Find the name...";
}
//修改结点
void C_funOperate::Modify()
{
	char name[20];
	cout << "enter the name you want to modify:";
	cin >> name;
	C_fun* pos = head->next;
	for (pos; pos != end; pos = pos->next)
	{
		if (strcmp(name, pos->C_name) == 0)
		{
			pos->input();
			break;
		}
	}
	cout << "Modify success!..." << endl;
	system("pause");
}
//保存结点
void C_funOperate::Save()
{
	out.open("file.txt");
	C_fun* pos = head->next;
	if (head->next == end)
	{
		cout << "StudentMessage List is Empty...." << endl;
		return;
	}
	else
	{
		for (pos; pos != end; pos = pos->next)
		{
			out << '\t' << pos->C_name << '\t' << pos->C_id << pos->C_function << pos->C_head << pos->C_funID;
			/*格式最好这样写,因为一开始会把文件读一下,以判断文件是否为空,所以前面最后用‘\t’来增加几个空格,给他读一个空格,
			以不读到正常数据,后面就不要有空格以为当程序从file.txt读信息时,可能会把空格也当是一个数据结点读进程序	*/
		}
	}
	out.close();
	cout << "Save node success!" << endl;
}
//清空文件
void C_funOperate::Clean()
{
	ofstream out("file.txt", ios::trunc);
	out.close();
	exit(0);
	//用exit使程序退出程序的时候,不调用 C_funOperate 类的析构函数,否则又会把内存的数据写到file.txt文件中 
}
int main() {
	//创建C函数查询管理系统
	C_fun c;
	C_funOperate C;
	int select = 0;
	while (true)
	{
		C.menu();
		cout << "请输入对应功能的序号,并以回车键结束:";
		cin >> select;

		switch (select)
		{
		case 1:  //读入装有C函数数据的文件
			c.readC();
			break;
		case 2:  //增加新的C语言函数
			C.Add_Node();
			break;
		case 3:  //删除指定的C语言函数
			C.Del_node();
			break;
		case 4:  //修改指定的C语言函数
			C.Modify();
			break;
		case 5:  //查询指定的C语言函数
			C.Find();
			break;
		case 6:  //显示功能类型相同的所有C语言函数
			C.showSame();
			break;
		case 7: //显示所有的C语言函数到屏幕上
			C.Display();
			break;
		case 0:  //退出C语言函数查询管理系统
			cout << "欢迎下次使用C语言函数查询管理系统" << endl;
			system("pause");
			return 0;
			break;
		default:
			break;
		}
	}

	system("pause");

	return 0;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
使用说明: 1、请选择“管理员”登录 用户名和密码 admin/admin 版权/邮箱/电话/地址,后台都可以动态修改; 2、学生或家长(家长用学生学号及密码登录)查询各种考试的成绩、班级、年级排名的信息; 请选择管理员登录 用户名和密码 admin/admin,看下某学生的学号及密码,再用学生的登录,就可以查询该生的成绩了。 一、网站主要功能: ·本学生成绩管理查询系统,主要适用于中学考试成绩记录统计分析。 ·该系统能够快捷方便地对学生的成绩进行录入和查询。便于学校和老师及学生对每次考试对比、分析及查询。 ·系统分为管理员、老师、学生三个级别。 ·老师录入及管理学生成绩初始密码为csmm1234;学生查看成绩账号为自己的学号,初始密码为666666。 二、系统操作流程: 1、配置IIS,如数据库路径不对或改名,请修改conn.asp 2、使用系统前先将所有数据清零。 3、修改学校信息(系统设置>>学校信息)。 4、增加老师(系统设置>>老师账号管理>>老师增加)。 5、增加班级(班级/考试管理>>年级|班级管理>>年级|班级增加)。 6、增加考试科目(班级/考试管理>>考试科目管理>>科目增加)。 7、增加考试名称(考试管理>>考试名称录入>>科目满分设置)必须设置好每学科的满分和及格分数,否则无法计算成绩分析。 6、录入学生信息(学生信息管理 >>录入学生信息或批量导入(注意:如批量导入,EXcEL表的格式和信息排列必需下载模版样表为例)。 7、成绩录入(学生成绩管理>>成绩录入或成绩导入(注意:如批量导入,EXcEL表的格式和学科排列必需下载模版样表为例)。   年级、班级、学号、姓名必需与学生信息的年级、班级、学号、姓名必须一至,否则学生用自己的学号查询的成绩会错误)。 8、班级排名、年级排名计算,成绩导入后(成绩计算统计>>计算科目总分 班级成绩排名 年级成绩排名 考试成绩平均分 考试成绩及格率>>设置学生成绩)。 9、成绩报表导出(成绩报表导出>>导出年级成绩表 导出班级成绩表)

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值