我是靠谱客的博主 迷你黑米,最近开发中收集的这篇文章主要介绍信息管理系统大作业,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

在这里插#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<string.h>
#include<io.h>
#include<windows.h>
#define _CRT_SECURE_NO_WARNINGS
#define MAXSIZE 40

typedef struct student{
	int grade1;
	int grade2;
	int grade3;
	struct student* next;//指向下一个节点
	struct student* last;//指向上一个节点,使用双向链表
	char name[30];//学生姓名
	char number[30];//学号
	char zy[40];//专业信息
}Stu,*LinkList;

char* filename = "d:\Documents\Desktop\text.txt";
int input = 0;//input变量是存放输入的数字来判断做什么功能的操作
int detail = 0;//判断是否查看详细信息
char newname[40];
char tempnum[40];
char name[40];
char zy[40];
int grade1 = 0;
int grade2 = 0;
int grade3 = 0;
int choice = 0;//用于修改学生信息时对修改内容进行选择
void initFromTxt(LinkList* students);//初始化读入信息
void deleteInfo(char* stuid,LinkList students);//删除一条信息,stuid是学号
void reWrite(LinkList students);//将内存中的信息,写入txt
void inserttxt(LinkList stu);//插入一条信息进入文本
void addinfo(char* stuid, char* name, int grade1, int grade2, int grade3, char* zy, LinkList students,int flag);//增加一条信息
void modify(char* stuid, LinkList students);//修改一条信息
void view(LinkList students);//界面
void checkInput(char* stuid, LinkList students);//输入一个学号,看他是否是本校学生
void lookdetail(Stu* stu);//查看学生的详细信息
void average(char* stuid, LinkList students);//计算某个学号的学生的平均分
void nextgrade(char* stuid, LinkList students);//查看该学生下一位同学的平均分
void lastgrade(char* stuid, LinkList students);//查看该学生上一位同学的平均分
void printTime();//显示当前时间
void passstu(LinkList students);//统计平均分大于六十分的人数
void InitStu(LinkList* students);//初始化链表
void totalcz(char* a,int* total);//保存操作的记录
void check1(char* stuid,LinkList students,int* flag);//检查输入的学号是否已经在文件中
void averagecourse(LinkList students);//查看课程的平均分
void check(char* stuid ,LinkList students);

void check(char* stuid, LinkList students)
{
	LinkList p = students->next;
	while (p)
	{
		if (strcmp(stuid, p->number) == 0)
		{
			printf("学号%s已在系统中!n", stuid);
			
			break;
		}
		p = p->next;
	}
	if (!p)
	{
		
		printf("学号%s不在系统中!n", stuid);

	}
	system("pause");
}
void averagecourse(LinkList students)
{
	int i,j=0;
	int sum1 = 0;
	int sum2 = 0;
	int sum3 = 0;
	double average1;
	double average2;
	double average3;
	LinkList p = students->next;
	printf("查看课程平均分n");
	printf("**********************************n");
	printf("1.查看数学科目的平均分n");
	printf("2.查看英语科目的平均分n");
	printf("3.查看政治科目的平均分n");
	printf("**********************************n");
	printf("请输入编号:");
	scanf("%d", &i);
	while (p)
	{
		sum1 = sum1 + p->grade1;
		sum2 = sum2 + p->grade2;
		sum3 = sum3 + p->grade3;
		p = p->next;
		j++;
	}
	average1 = sum1 / j;
	average2 = sum2 / j;
	average3 = sum3 / j;
	switch (i)
	{
	case 1:
		printf("数学科目的平均分为:%.2fn", average1);
		break;
	case 2:
		printf("英语科目的平均分为:%.2fn", average2);
		break;
	case 3:
		printf("政治科目的平均分为:%.2fn", average3);
		break;
	default:
		break;
	}
	system("pause");
}
void check1(char* stuid,LinkList students,int* flag)
{
	LinkList p = students->next;
	while (p)
	{
		if (strcmp(stuid, p->number) == 0)
		{
			printf("学号%s已在系统中!n", stuid);
			*flag = 0;
			break;
		}
		p = p->next;
	}
	if (!p)
	{
		*flag = 1;
		printf("学号%s不在系统中!n", stuid);
		
	}
	system("pause");
}
void totalcz(char* a,int* total)//question!!!!!!!
{
	system("cls");
	int i = 0;
	int j = 0;
	printf("操作者:%sn进行了以下操作:n",a);
	printf("************************************************n");
	while (i < MAXSIZE&&total[i])
	{
		j = total[i];
		switch (j)
		{
		case 1:
			printf("进行了增加学生信息的操作n");
			break;
		case 2:
			printf("进行了删除学生信息的操作n");
			break;
		case 3:
			printf("进行了修改学生信息的操作n");
			break;
		case 4:
			printf("进行了查询学生信息的操作n");
			break;
		case 5:
			printf("进行了查看学生平均分的操作n");
			break;
		case 6:
			printf("进行了查看上一位学生成绩的操作n");
			break;
		case 7:
			printf("进行了查看下一位学生成绩的操作n");
			break;
		case 8:
			printf("进行了查询平均分大于60分的学生人数的操作n");
			break;
		case 9:
			printf("进行了查找学生的操作n");
			break;
		case 11:
			printf("查看操作结束!n");
			break;
		case 10:
			printf("进行了查看课程平均分的操作n");
			break;
		case 12:
			return;
			break;
		default:
			break;
		}
		i++;
	}
	printf("************************************************n");
	system("pause");
}
void InitStu(LinkList* students)
{
	*students = (LinkList)malloc(sizeof(Stu));//初始化链表,创建头结点
	(*students)->next = NULL;
}
void passstu(LinkList students)
{
	system("cls");
	double average;
	int i = 0;
	Stu* p = students->next;
	while (p)
	{
		average = (p->grade1 + p->grade2 + p->grade3) / 3;
		if (average >= 60.0)
			i++;
		p = p->next;
	}
	printf("平均分大于六十分的人数为%dn", i);
	system("pause");
}
void printTime()//显示当前时间
{
	time_t nowtime;
	nowtime = time(0);
	struct tm* sttm;
	sttm = localtime(&nowtime);//返回一个tm结构体指针类型
	printf("时间:%4d-%02d-%02dn", sttm->tm_year + 1900, sttm->tm_mon + 1, sttm->tm_mday);
}
void initFromTxt(LinkList* students)
{
	FILE* fp;
	fp = fopen(filename, "r");
	if (fp == NULL)
		printf("The file was not opened!");
	LinkList p = (*students);//类似于尾指针
	while (1)
	{
		LinkList stu = (LinkList)malloc(sizeof(Stu));
		if (fscanf(fp,"%s %d %d %d %s %s", &(stu->name), &(stu->grade1), &(stu->grade2), &(stu->grade3), &(stu->number), &(stu->zy)) == EOF)
		{
			free(stu);//释放该节点
			break;
		}
		stu->next = NULL;
		p->next = stu;
		stu->last = p;
		p = stu;
	}
	fclose(fp);//关闭文件
}
void deleteInfo(char* stuid, LinkList students)
{
	Stu* p;
	int isfound = 0;
	p = students->next;
	while (p && strcmp(stuid, p->number))
	{
		p = p->next;
	}
	if (!p)
		printf("学号输入有误!n");
	if (strcmp(stuid, p->number) == 0)
	{
		printf("警告!你正在进行删除操作!n");
		printf("------------------------------------------------n");
		printf("被删除学生的信息为:n");
		printf("姓名  成绩1  成绩2  成绩3     学号     专业信息n");
		printf("%s %5d %5d %5d %15s %8sn", p->name, p->grade1, p->grade2, p->grade3, p->number, p->zy);
		printf("------------------------------------------------n");
		if (p->next == NULL)
		{
			p->last->next = NULL;
			free(p);
			reWrite(students);
			isfound = 1;
		}
		else {
			p->last->next = p->next;
			p->next->last = p->last;
			free(p);
			reWrite(students);
			isfound = 1;
		}
	}
	if (isfound)
	{
		printf("删除成功!n");
	}
	else
		printf("删除失败!n");
	system("pause");

}
void reWrite(LinkList students)
{
	FILE* fp;
	Stu* p = students->next;
	fp = fopen(filename, "w");
	fclose(fp);//清空当前文件里面的内容
	if (p == NULL)//没有学生
	{
		return;
	}
	else
	{
		while (p != NULL)
		{
			inserttxt(p);
			p = p->next;
		}
	}
}
void inserttxt(LinkList stu)
{
	FILE* fp;
	fp = fopen(filename, "a");
	if (fp == NULL)
	{
		printf("文件打开失败!");
		return;
	}
	fprintf(fp, "%s %d %d %d %s %sn", stu->name, stu->grade1, stu->grade2, stu->grade3, stu->number, stu->zy);
	fclose(fp);
}
void modify(char* stuid,LinkList students)//修改一条信息
{
	int flag = 0;
	Stu* p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("查无此人!");
		return;
	}
	if (p) {
		system("cls");
		printf("警告!你正在进行修改操作!n");
		printf("****************************n");
		printf("1.修改学生姓名n");
		printf("2.修改成绩1n");
		printf("3.修改成绩2n");
		printf("4.修改成绩3n");
		printf("5.修改专业信息n");
		printf("****************************n");
		printf("请输入序号:");
		scanf("%d", &choice);
	}
	if (choice == 1)
	{
		printf("请输入该学生的姓名: ");
		scanf("%s", newname);
		strcpy(p -> name, newname);
		reWrite(students);
		flag = 1;
	}
	if (choice == 2)
	{
		printf("请输入该学生的新成绩: ");
		scanf("%d", &grade1);
		p->grade1 = grade1;
		reWrite(students);
		flag = 1;
	}
	if (choice == 3)
	{
		printf("请输入该学生的新成绩: ");
		scanf("%d", &grade2);
		p->grade2 = grade2;
		reWrite(students);
		flag = 1;
	}
	if (choice == 4)
	{
		printf("请输入该学生的新成绩: ");
		scanf("%d", &grade3);
		p->grade3 = grade3;
		reWrite(students);
		flag = 1;
	}
	if (choice == 5)
	{
		printf("请输入该学生新的专业信息:");
		scanf("%s", zy);
		strcpy(p->zy,zy);
		reWrite(students);
		flag = 1;
	}
	if (flag == 1)
	{
		printf("修改成功!n");
	}
	else
		printf("修改失败!n");
	system("pause");
}
void addinfo(char* stuid, char* name, int grade1,int grade2,int grade3,char* zy,LinkList students,int flag)//增加一条信息
{
	system("cls");
	Stu* p = students->next;
	while (p->next)
	{
		p = p->next;
	}
	if (flag == 0)
	{
		printf("学号%s已在系统中n无法重复添加!n",stuid);
	}
	if (flag == 1)
	{
		Stu* q = (Stu*)malloc(sizeof(Stu));
		p->next = q;
		q->last = p;
		q->next = NULL;
		q->grade1 = grade1;
		q->grade2 = grade2;
		q->grade3 = grade3;
		strcpy(q->name, name);
		strcpy(q->number, stuid);
		strcpy(q->zy, zy);
		inserttxt(q);
		printf("信息读入成功!n");
	}
	system("pause");
}
void checkInput(char* stuid, LinkList students)
{
	LinkList p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("学号%s 不是我们学校的学生n", stuid);
	}
	else
	{
		printf("学号%s 是我们学校的学生n他的名字是:%sn", stuid, p->name);
		printf("是否查看详细信息(是/1,否/0):");
		scanf("%d", &detail);
		if (detail == 1)
			lookdetail(p);
		else
			return;
	}
	system("pause");
}
void lookdetail(Stu* p)
{
	printf("姓名  数学成绩  英语成绩  政治成绩    学号       专业信息n");
	printf("%s %6d %8d %10d %16s %8sn", p->name, p->grade1, p->grade2, p->grade3, p->number, p->zy);
}
void findInfo(char* stuid,LinkList students)
{

	Stu* p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("学号%s 未找到信息n", stuid);
	}
	else
	{
		printf("学号%s 查找到信息n他的名字是:%sn", stuid, p->name);
		printf("是否查看详细信息(是/1,否/0):");
		scanf("%d", &detail);
		if (detail == 1)
			lookdetail(p);
		else
			return;
	}
	system("pause");
}
void average(char* stuid,LinkList students)
{
	
	double average;
	Stu* p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("学号%s 未找到信息n", stuid);
		Sleep(5000);
	}
	else
	{
		printf("学号%s 查找到信息n他的名字是:%sn", stuid, p->name);
		average = (p->grade1 + p->grade2 + p->grade3) / 3;
		printf("该学生的平均分为: %.2fn", average);
	}
	system("pause");
}
void nextgrade(char* stuid,LinkList students)
{
	double average;
	Stu* p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("学号%s 未找到信息n", stuid);
	}
	else
	{
		if (p->next == NULL)
		{
			printf("学号%s是最后一位学生,无法查看下一位学生的信息!n");
		}
		else {
			p = p->next;//找到下一位学生
			printf("下一位学生的数学成绩为:%d,英语成绩为:%d, 政治成绩为:%dn", p->grade1, p->grade2, p->grade3);
			average = (p->grade1 + p->grade2 + p->grade3) / 3;
			printf("下一位同学的平均分为:%.2fn", average);
		}
	}
	system("pause");
}
void lastgrade(char* stuid,LinkList students)
{
	double average;
	Stu* p = students->next;
	while (p && strcmp(p->number, stuid))
	{
		p = p->next;
	}
	if (!p)
	{
		printf("学号%s 未找到信息n", stuid);
	}
	else
	{
		if (p->last == students)
		{
			printf("学号%s是第一名学生,无法查看上一位学生的信息!n", stuid);
		}
		else {
			p = p->last;//找到上一位学生
			printf("上一位学生的数学成绩为:%d,英语成绩为:%d, 政治成绩为:%dn", p->grade1, p->grade2, p->grade3);
			average = (p->grade1 + p->grade2 + p->grade3) / 3;
			printf("上一位同学的平均分为:%.2fn", average);
		}
	}
	system("pause");
}
void view(LinkList students)
{
	int flag;
	int total[MAXSIZE];
	char a[20];//用于保存操作者姓名
	printf("请输入操作者姓名: ");
	scanf("%s", a);
	getchar();
	int i = 0;
	while (1)
	{
		system("cls");
		printf("   郑州大学教务管理系统n");
		printTime();
		printf("操作者姓名: %sn", a);
		printf("************************************n");
		printf("1.增加学生信息n");
		printf("2.删除学生信息n");
		printf("3.修改学生信息n");
		printf("4.查询学生信息n");
		printf("5.查看某个的学生平均分n");
		printf("6.查看上一位学生的成绩n");
		printf("7.查看下一位学生的成绩n");
		printf("8.查询平均分大于六十分的学生人数n");
		printf("9.查找学生n");
		printf("10.查看课程的平均分n");
		printf("11.查看操作记录n");
		printf("12.退出n");
		printf("************************************n");
		printf("请输入功能编码:");
		scanf("%d", &input);
		total[i++] = input;
		switch (input)
		{
		case 1:
			system("cls");
			printf("请输入新学生的信息(请按姓名 成绩1 成绩2 成绩3 学号 专业的顺序输入):n");
			scanf("%s %d %d %d %s %s",name,&grade1,&grade2,&grade3,tempnum,zy);
			check1(tempnum, students,&flag);
			addinfo( tempnum,name,grade1,grade2,grade3,zy,students,flag);
			break;
		case 2:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			check(tempnum, students);
			deleteInfo(tempnum,students);
			break;
		case 3:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			check(tempnum, students);
			modify(tempnum,students);
			break;
		case 4:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			checkInput(tempnum,students);
			break;
		case 5:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			check(tempnum, students);
			average(tempnum,students);
			break;
		case 6:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			check(tempnum, students);
			lastgrade(tempnum,students);
			break;
		case 7:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			check(tempnum, students);
			nextgrade(tempnum,students);
			break;
		case 8:
			system("cls");
			passstu(students);
			break;
		case 9:
			system("cls");
			printf("请输入学号:");
			scanf("%s", tempnum);
			findInfo(tempnum,students);
			break;
		case 10:
			system("cls");
			averagecourse(students);
			break;
		case 11:
			system("cls");
			totalcz(a,total);
			break;
		case 12:
			return;
			break;
		default:
			printf("输入错误!按任意键返回n");
			getchar(); getchar();
			break;
		}
	}
}
int main()
{
	LinkList students=NULL;
	system("color 7C");
	InitStu(&students);
	initFromTxt(&students);
	view(students);
	return 0;
}入代码片

最后

以上就是迷你黑米为你收集整理的信息管理系统大作业的全部内容,希望文章能够帮你解决信息管理系统大作业所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部