概述
在这里插#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;
}入代码片
最后
以上就是迷你黑米为你收集整理的信息管理系统大作业的全部内容,希望文章能够帮你解决信息管理系统大作业所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复