【C语言项目开发实战入门 - 学生信息管理系统】即开速食

学生信息管理系统

前情提要

  • 其实原本我不是很想做这个学校项目,但是我上CSDN 发现没有一篇是关于这个(找不到代码copy)
    所以也有了今天这篇代码,直接开搞

注意里面为了方便,我加了一点C++的东西

当然,这也是我一个字一个字敲出来的,辛苦费一个赞没关系吧!
拜托啦这个对我真的很重要QAQ

开吃

#include<iostream>
using namespace std;
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<string.h>

//宏定义
#define LEN sizeof(struct student)
#define FORMAT "%-8d%-15s%-12.1lf%-12.1lf%-12.1lf%-12.1lf%"//向左对齐,不够8位补空格
#define DATA stu[i].num,stu[i].name, stu[i].elec,stu[i].expe,stu[i].requ,stu[i].sum


/*
    函数声明 
*/ 
void in();  //录用学生信息 
void search();//查找学生信息
void del();//删除学生信息 
void modify();//修改学生信息 
void insert();//插入学生信息 
void order();//对学生从高到低进行排序 
void tatal();//统计学生人数 
void show();//显示学生信息 
void menu();//菜单


 
/*
    结构体 
*/

struct student
{
	int num; //学号 
	char name[15];//姓名 
	double elec;//选修课 
	double expe;//实验课 
	double requ;//必修课 
	double sum;//总分 
};

struct student stu[50]; //定义结构体数组


void in()
{
	int i, m = 0;  //m是记录的条数 
	char ch[2];
	FILE *fp;   //定义访问文件指针 
	if((fp = fopen("data.txt", "a+")) == NULL)
	{
		cout << "文件不存在!" << endl;
		return;
	 } 
	 while(!feof(fp))
	 {
	 	if(fread(&stu[m],LEN, 1, fp) == 1)
	 	{
	 		m++;
		 }
	 }
	 fclose(fp);
	 if(m == 0)
	 {
	 	cout << "文中没有记录" << endl;
	 }
	 else
	 {
	 	show();  //调用原有信息 
	 }
	 
	 if((fp = fopen("data.txt", "wb")) == NULL) 
	 {
	 	cout << "文件不存在!" << endl;
	 	return;
	 }
	cout << "请输入学生的信息(y/n):";
	cin >> ch;
	while(strcmp(ch, "y") == 0 || strcmp(ch, "Y") == 0) //判断是否要录用信息
	{
	 	cout << "number:";
	 	cin >> stu[m].num;
	 	for(i = 0; i < m; i++)
	 	{
	 		if(stu[i].num == stu[m].num)
	 		{
	 			cout << "number已经存在了,请按任意键继续!";
				 getch();
				 fclose(fp);
				 return; 
			}
		}
		cout << "name:";
		cin >> stu[m].name;
		cout << "elective(选修课成绩):";
		cin >> stu[m].elec;
		cout << "experiment:";
		cin >> stu[m].expe;
		cout << "require course:(必修课成绩)"; 
	 	cin >> stu[m].requ;
		  
		stu[m].num = stu[m].elec + stu[m].expe + stu[m].requ; //计算出总成绩
		if(fwrite(&stu[m], LEN, 1, fp) != 1)
		{
			cout << "不能保存" ;
			getch();
		}
		else
		{
			cout << stu[m].name << " 被保存!" << endl;
			m++;
		}
		cout << "是否继续录用?(y/n):";
		cin >> ch;	  	  
	  } 
	  fclose(fp);
	  cout << "好的嘞!"<< endl;
 } 
void search()
{
	FILE *fp;
	int snum, i, m = 0;
	if((fp = fopen("data.txt", "rb")) == NULL)
	{
		cout << "文件不存在!" << endl;
		return;
	 } 
	 while(!feof(fp))
	 {
	 	if(fread(&stu[m],LEN, 1, fp) == 1)
	 	{
	 		m++;
		 }
	 }
	 fclose(fp);
	 if(m == 0)
	 {
	 	cout << "文中没有记录" << endl;
	 }
	 cout << "请输入number:";
	 cin >> snum;
	 for(int i = 0; i < m; i++)
	 if(snum == stu[i].num)
	 {
	 	cout << "number  name          elective     experiment  required    sum\t" << endl;
	 	printf(FORMAT, DATA);
	 	break;
	 }
	 if(i == m) cout << "没有找到该学生哟!" << endl;
}
void del()
{
	FILE *fp;
	int snum, i, j, m = 0;
	char ch[2];
	if((fp = fopen("data.txt", "r+")) == NULL)
	{
		cout << "文件不存在!" << endl;
		return;
	 } 
	 while(!feof(fp))
	 {
	 	if(fread(&stu[m],LEN, 1, fp) == 1)
	 	{
	 		m++;
		 }
	 }
	 fclose(fp);
	 
	 if(m == 0)
	 {
	 	cout << "文件中没有记录!" << endl;
	 	return;
	 }
	 cout << "请输入学生学号:";
	 cin >> snum;
	 for(int i = 0; i < m; i++)
	 {
	 	if(snum == stu[i].num)
	 	{
	 		cout << "找到了这条记录,是否删除?(y/n)";
			 cin >> ch;
			 if(strcmp(ch,"Y") == 0 | strcmp(ch, "y") == 0)
			 {
			 	for(j = i; j < m; j++)
			 	{
			 		stu[j] = stu[j+1];
			 		m--;
				 }
				 if((fp = fopen("data.txt","wb")) == NULL)
				 {
				 	cout << "文件不存在!" << endl;
					 return; 
				 }
				 for(j = 0; j < m ; j ++)
				 if(fwrite(&stu[j], LEN, 1, fp) != 1)
				 {
				 	cout << "删除失败!" << endl;
					 getch(); 
				 }
				 fclose(fp);
				 cout << "删除成功!" << endl; 
				 
			  } else{
			  	cout << "找到记录了,选择不删除!";
			  } 
			  break;
		 }
		 else{
		 	cout << "没有找到这名学生!" << endl;
		 }
	  } 
}
void modify()
{
	FILE *fp;
	struct student t;
	int i = 0, j = 0 , m = 0 , snum;
	if((fp = fopen("data.txt","r+"))==NULL)
	{
		printf("文件不存在!\n");
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m], LEN, 1, fp) == 1) m++;
	if(m == 0)
	{
		printf("文中没有记录!\n");
		fclose(fp);
		return; 
	 } 
	 show();
	 printf("请输入要修改的学生number: ");
	 cin >> snum;
	 for(int i = 0 ; i < m; i++)
	 	if(snum == stu[i].num)
	 	{
	 		cout << "找到了这名同学的信息,可以修改他的信息!\n";
	 		cout << "name:";
	 		cin >> stu[i].name;
			cout << "elective:";
			cin >> stu[i].elec;
			cout << "experiment:";
			cin >> stu[i].expe;
			cout << "required course:";
			cin >> stu[i].requ;
			cout << "修改成功!";
			stu[i].num = stu[i].elec + stu[i].expe+ stu[i].requ;
			if((fp = fopen("data.txt","wb")) == NULL) 
			{
				cout << "不能打开文件\n";
				return;
			}
			for(j = 0; j < m; j ++)
				if(fwrite(&stu[j], LEN, 1, fp) != 1)
				{
					cout << "不能保存文件!";
					getch();
				}
				fclose(fp);
				break;
		 }
		 if(i == m)
		 {
		 	cout << "没有找到这名学生!\n";//未找到要查找的信息 
		 }
}
void insert()
{
	FILE *fp;
	int i, j, k, m = 0,snum;
	if((fp = fopen("data.txt", "r+")) == NULL)
	{
		cout << "文件不存在!\n";
		return;
	}
	while(!feof(fp))
	     if(fread(&stu[m], LEN, 1, fp) == 1) m++;
	if(m == 0)
	{
		cout << "文件中没有记录!" <<endl;
		fclose(fp);
		return; 
	}
	
	cout << "请输入要插入的位置(number):" << endl;
	cin >> snum;   // 输入要插入的位置 
	for( i = 0 ; i < m ; i ++)
	{
		if(snum == stu[i].num) break;
		for(j = m -1 ; j > i; j--)
			stu[j + 1] = stu[j]; //从第一条记录开始均向后移动以为 
		
		cout << "请输入要插入的学生的信息。" << endl;
		cout << "number:";
		cin >> stu[i].num;
		for(k = 0 ; k < m ; k ++)
		{
			if(stu[k].num == stu[m].num)
			{
				cout << "number已经存在,请按任意键继续!";
				getch();
				fclose(fp);
				return;
			}
			cout << "name:";
			scanf("%s", stu[i + 1].name);
			cout << "elective:";
			scanf("%lf", &stu[i+1].elec);
			cout << "experiment:";
			scanf("%lf",&stu[i+1].expe);
			cout << "required course:";
			scanf("%lf",&stu[i+1].requ);
			stu[i+1].num = stu[i+1].elec + stu[i+1].expe+ stu[i+1].requ;
			cout << "插入成功!按任意键返回主界面!"<< endl;
			if((fp = fopen("data.txt","wb")) == NULL)  //如果文件不存在,给出提示
			{
				cout << "不能打开!" << endl;
				return; 
			 } 
			 for(k = 0; k <= m; k ++)
			 {
			 	if(fwrite(&stu[k], LEN, 1, fp) != 1)
			 	{
			 		cout << "不能保存!";
					 getch(); 
				 }
			 }
			 fclose(fp);
		}
	}
}
void order()
{
	FILE* fp;
	struct student t;
	int i = 0, j = 0 , m = 0;
	if((fp = fopen("data.txt","r+")) == NULL)
	{
		cout << "文件不存在" <<endl;
		return;
	}
	while(!feof(fp))
	if(fread(&stu[m],LEN,1,fp) == 1) m++;
	fclose(fp);
	if(m == 0)
	{
		cout << "文件中没有记录!" << endl;
		return; 
	}
	if((fp = fopen("data.txt", "wb")) == NULL)
	{
		cout << "文件不存在!"  << endl;
		return; 
	}
	for(i = 0 ; i < m-1 ; i++)
		for(j = i+1; j < m; j ++)
			if(stu[i].sum < stu[j].num){
				t = stu[i];
				stu[i] = stu[j];
				stu[j] = t;
			}
	if((fp = fopen("data.txt","wb"))==NULL)
	{
		cout << "文件不存在!" << endl;
		return;
	}
	for(i = 0 ; i < m ; i ++)
		if(fwrite(&stu[i], LEN, 1, fp) != 1)
		{
			printf("%s 不能保存文件!\n");
			getch(); 
		}
	fclose(fp);
	cout << "保存成功!" << endl;
}
void total()
{
	FILE *fp;
	int m = 0;
	if((fp = fopen("data.txt","r+"))== NULL)
	{
		cout << "文件不存在!" << endl;
		return;
	}
	while(!feof(fp))
		if(fread(&stu[m],LEN, 1,fp)==1) m++;
	if(m == 0)
	{
		cout << "文件无法命名!"  << endl;
		fclose(fp);
		return;
	}
	cout << "这个班级一共有"  << m << endl;
	fclose(fp); 
}
void show()
{
	FILE *fp;
	int i, m = 0;
	fp = fopen("data.txt","rb");
	while(!feof(fp))
	{
		if(fread(&stu[m], LEN, 1, fp) == 1)
		m++;
	 } 
	 fclose(fp);
	 printf("number  name          elective     experiment  required     sum\t\n");
	 for(i= 0; i < m; i++)
	 {
	 	printf(FORMAT, DATA);    //将信息按指定格式打印 
	 	cout << endl;
	 }
}

/*
    自定义实现菜单功能 
*/
void menu()
{
	system("cls");
    cout << "\n\n\n\n";
    cout << "\t\t|---------------学生信息管理系统---------------|" << endl;
	cout << "\t\t|\t\t\t\t\t       |" << endl;
	cout << "\t\t|\t\t 1. 录入学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 2. 查找学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 3. 删除学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 4. 修改学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 5. 插入学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 6. 排序\t\t       |" << endl; 
	cout << "\t\t|\t\t 7. 统计学生总数\t       |" << endl; 
	cout << "\t\t|\t\t 8. 显示所有学生信息\t       |" << endl; 
	cout << "\t\t|\t\t 0. 退出系统\t\t       |" << endl;
	cout << "\t\t|\t\t\t\t\t       |" << endl; 
	cout << "\t\t|----------------------------------------------|" << endl;
	cout << "\t\t\t请选择(0-8):"; 
}




/**
    主函数 
 */
int main()
{
	system("color f0\n");//白底黑字
	int n;
	menu();
	cin >> n;
	cout << n << endl;
	
	while(n)
	{
		switch(n)
		{
			case 1:
				in();
				break;
			case 2:
				search();
				break;
			case 3:
				del();
				break;
			case 4:
				modify();
				break;
			case 5:
				insert();
				break;
			case 6:
				order();
				break;
			case 7:
				total();
				break;
			case 8:
				show();
				break;
			default:
			    break;	
		}
		getch();
		menu();
		cin >> n;
	}
		 
}
  • 4
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值