学生学籍管理系统

                                         <span style="color:#ff0000;">   学生学籍管理系统</span>

这个项目用了一天半的时间就完成了,一开始我没打算用链表来实现的,但是我自学链表也有一段时间了,想看看自己对链表掌握了多少,所以选择了用链表。第一次用链表写了一个系统,难免会有Bug,希望各位程序猿能指点一下。。。。。

/**********************************************
学生学籍管理系统
每个学生的信息包括:学号、姓名、性别、三门成绩
***********************************************/

#include <iostream>
#include<cstring>
#include <cstdio>
#include <Windows.h>
using namespace std;
const int N=10 ;  //N表示系统最多能记录多少个学生的信息
const int courseNum = 3;  //三门课程
const char courseTitle[courseNum][10] = { "数学", "英语", "体育" }; //三门课程名

struct Date
{
	// 定义年、月、日
	int yesr;
	int month;
	int day;
};

struct CStudent
{
	int id; // 学号,范围1至100
    char  name[10]; // 假设每个人的姓名长度不超过9个字符
	char sex; // 性别,'M'表示男,'F'表示女
	double score[courseNum]; // 每人有三门成绩
	double avescore;//平均成绩
	Date birthDate;
	CStudent *next;
}stud;

int choice;
int n=0;
int getChoice()
{
	system("cls");
	printf("                                当前学生人数:%d\n",n);
	printf("1. 添加学生信息\n");
	printf("2. 显示所有学生信息\n");
    printf("3. 按学号查询某个学生的信息\n");
    printf("4. 按姓名查询某个学生的信息\n");
    printf("5. 按姓名修改某个学生的信息\n");
	printf("6. 按学号删除某个学生的信息\n");
	printf("7. 退出系统\n");
	do
	{
		scanf("%d",&choice);
	} while (choice < 1 || choice > 7);
	return choice;
}

void getAge(const CStudent* s)
{
	SYSTEMTIME time;
	GetLocalTime(&time);
	int year = time.wYear;
	printf("%d\n",time.wYear-s->birthDate.yesr);
}

// 添加一个记录,若添加成功,则函数返回true;
// 否则(数组已满),则返回false
int a[100000];//判断学号是否重复
CStudent *p, *head, *q,*t;
void InPut()
{
	if (n==0)
	{
		head = new CStudent;
		head->next = NULL;
		p = head;
	}
	double sum = 0;
	q = new CStudent;
	cout << "学号(1~100):";
	scanf("%d",&q->id); // 思考:如何添加代码,判断输入学号不重复
	while (!a[q->id])
	{
		if (a[q->id] == 0)
		{
			a[q->id] = 1;
		}
		else
		{
		  scanf("%d",&q->id);
		}
	}
    printf("姓名:");
	 scanf("%s",&q->name);
	 printf("性别(M-男,F-女):");
	 cin.get();
	 scanf("%c",&q->sex);
	 printf("%d",courseNum);
	 printf("门课程成绩:\n");
	for (int i = 0; i < courseNum; i++)
	{
		printf("%s :",courseTitle[i]);
		 scanf("%lf",&q->score[i]);
		sum += q->score[i];
	}
	q->avescore = sum / 3.0;
	printf("请输入出生年月日:");
	scanf("%d %d %d",&q->birthDate.yesr,&q->birthDate.month,&q->birthDate.day);
	printf("\n");
	if (n)
	{
		head=p;
		t = p->next;
		for (int i = 0; i < n; ++i)
		{
			if (q->avescore>t->avescore&&t->next!=NULL)
			{
				head=t;
				t = t->next;
			}
			else if(q->avescore>t->avescore&&t->next==NULL)
			{
				t->next = q;
				t=q;
				t->next = NULL;
				break;
			}
			else
			{
				q->next=t;
				head->next=q;
			}
		}
	}
	else
	{
		head->next = q;
		head = q;
		head->next = NULL;
	}
	n++;  //记录人数+1
	printf("成功添加信息\n");
}
void Sort(CStudent* q)//修改数据后重新按平均分排序
{
	if (n)
	{
		head=p;
		t = p->next;
		for (int i = 0; i < n; ++i)
		{
			if (q->avescore>t->avescore&&t->next!=NULL)
			{
				head=t;
				t = t->next;
			}
			else if(q->avescore>t->avescore&&t->next==NULL)
			{
				t->next = q;
				t=q;
				t->next = NULL;
				break;
			}
			else
			{
				q->next=t;
				head->next=q;
			}
		}
	}
	else
	{
		head->next = q;
		head = q;
		head->next = NULL;
	}
	n++;  //记录人数+1
}
void ShowAllInfo(const CStudent* w)// 显示所有记录
{
	w = w->next;
	int h=0;
	while (w)
    {
		printf("位置\t学号\t姓名\t性别\t平均分\t年龄\n");
		printf("%d\t",h++);
		printf("%d\t",w->id);
		printf("%s\t",w->name);
		printf("%c\t",w->sex);
		printf("%.2lf\t",w->avescore);
		 getAge(w);
		for (int i=0;i<courseNum;++i)
		{
			printf("%s: ",courseTitle[i]);
			printf("%.1lf\t",w->score[i]);
		}
		printf("\n");
		printf("----\\\n");
		printf("----/\n");
		w=w->next;
	}
}
void findById(const CStudent* w)
{
	int count = 0 ,num,flag=0;
	printf("请输入学生学号:\n");
	scanf("%d",&num);
	w=w->next;
	while (w)
	{
		if (w->id==num)
		{
			flag=1;
			printf("此学生的位置:");
			printf("%d\n",count);
			printf("查找成功!\n");
			break;
		}
		count++;
		w=w->next;
	}
	if (flag==0)
	{
		printf("查找失败!\n");
	}
}
void findByName(const CStudent* w)
{
	int count = 0 ,flag=0;
	char Name[10];
    printf("请输入想要找的姓名:\n");
	scanf("%s",&Name);
	printf("\n");
	w=w->next;
	while (w)
	{
		if (strcmp(w->name,Name)==0)
		{
			flag=1;
			printf("此名学生的位置:%d\n",count);
			break;
		}
		count++;
		w=w->next;
	}
	if (flag==0)
	{
		printf("找不到此名学生学号!\n");
	}
}
void modify(CStudent* w)
{
	int count = 0 ,flag=0;
	char Name[10];
	double sum=0;
    printf("请输入要修改的姓名:");
	scanf("%s",&Name);//修改第N条记录,为name
	cin.get();
	printf("\n");
		while (true&&w!=NULL)
		{
			head=w;
			w=w->next;
			if (strcmp(Name,w->name)==0)
			{
				if (w->next!=NULL)
				{
					head->next=w->next;
				}
				else
				{
					head->next=NULL;
				}
				q=w;
				printf("姓名:");
				scanf("%s",& q->name);
				cin.get();
				printf("性别(M-男,F-女):");
				scanf("%c",& q->sex);
				printf("%d",courseNum);
				printf("门课程成绩:\n");
				for (int i = 0; i < courseNum; i++)
				{
					printf("%s :",courseTitle[i]);
					scanf("%lf",& q->score[i]);
					sum += q->score[i];
				}
				q->avescore = sum / courseNum;
				printf("请输入出生年月日:");
				scanf("%d %d %d",&q->birthDate.yesr,&q->birthDate.month,&q->birthDate.day);
				printf("\n");
				flag=1;
				n--;
				Sort(q);
				printf("修改成功!\n");
				break;
			}
		}
		if (flag==0)
		{
			printf("修改失败!\n");
		}
}
void removeAt(CStudent* w)
{
	//删除第N条记录
	int N,L=0;
	CStudent *k,*H;
	printf("请输入要删除的学号:");
	scanf("%d",&N);
	printf("\n");
	k=p;
	w=w->next;
		while (w)
		{
			if (w->id==N)
			{
				H=w;
				if (w->next==NULL)
				{
					k->next=NULL;
				}
				else
				{
				  k->next=w->next;
				}
				printf("删除成功\n");
				L=1;
				delete H;
				n--;
				break;
			}
		}
		if (L==0)
		{
			printf("删除失败\n");
		}
}
int main()
{
	memset(a, 0, sizeof(a));
	while (true)
	{
		getChoice();
		switch (choice)
		{
		case 1:
			// 添加一个记录,若添加成功,则函数返回true;
			// 否则(数组已满),则返回false
			InPut(); break;
		case 2:
			// 显示所有记录
			ShowAllInfo(p); break;
		case 3:
			// 按学号查找,若记录中存在queryId,则返回该记录在数组中的位置
			// 否则返回-1
			findById(p); break;
		case 4:
			// 按姓名查找,若记录中存在queryName,则返回该记录在数组中的位置
			// 否则返回-1
			findByName(p); break;
		case 5:
			// 修改第p条记录
			modify(p); break;
		case 6:
			// 删除第p条记录
			removeAt(p); break;
		case 7: return 0;
		}
		system("pause");
	}
}

时间: 2024-11-05 13:29:38

学生学籍管理系统的相关文章

[C语言练习]学生学籍管理系统

? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86

JAVA测验—学生学籍管理系统

设计思路: 创建基本的ScoreInfoemation类,创建基本的数据成员以及基本的设置方法.获取数据方法以及有无参的构造方法. 1 package Test; 2 3 import java.util.*; 4 5 public class ScoreInformation { 6 7 private String stunumber; 8 private String name; 9 private double mathematicsscore; 10 private double en

石家庄铁道大学软件工程系学生学籍管理系统2019版

//信1805-1 戴伟伟 20183773package dww; import java.util.Scanner; class ScoreInformation { private String stunumber; private String name; private double mathematicsscore; private double englishscore; private double networkscore; private double databasesco

JAVA学生学籍管理系统

每天记录学习,每天会有好心情.*^_^* 今天记录的项目是基于JAVA的学生学籍管理系统,基于JAVA的学生学籍管理系统项目是这么回事:电子学籍系统可对学生学籍注册.档案管理.学籍异动.升级.毕业.成长记录实现全程信息化管理.采用当前非常流行的B/S体系结构,以JAVA作为开发技术,主要依赖SSM技术框架,mysql数据库.2013年12月8日,教育部基础教育一司司长王定华在长春出席会议时表示,中小学电子学籍系统将在2013年年底全国联网,2014年正式实现开通,今后中央在一些经费支持方面,将与

学生学籍管理系统_管理员登陆对学生的信息进行操作

MInterface.java package studentManage; import java.awt.*; import java.awt.event.*; import javax.swing.*; /* * 管理员 * 操作界面接口类,可以直接扩展.调用. */ public class MInterface extends JFrame implements ActionListener { static JMenuBar jMenuBar = new JMenuBar();//

学生学籍管理系统_学生登陆系统查询与修改信息

SCx.java package studentManage; import javax.swing.*; import java.awt.*; import java.awt.event.*; import java.sql.*; public class SCx extends JFrame implements ActionListener { static SCx s; static JLabel label1 = new JLabel("学号:"); static JText

C语言学生学籍管理系统源码,有实验报告噢!

设计一个学生成绩管理系统,对上学期的本班的学习成绩进行管理,具有查询和检索功能,并且能够对指定文件操作,也可将多个文件组成一个文件?. A . ??设计内容 1 .每一条记录包括一个学生的学号.姓名.性别.各门课成绩(上学期的科目).平均成绩. 2 .输入功能:可以一次完成若干条记录的输入. 3 .显示功能:完成全部学生记录的显示. 4 .查找功能:完成按姓名或学号查找学生记录,并显示. 5 .排序功能:按学生平均成绩进行排序. 6 .插入功能:按 学号顺序插入 一条学生记录. 7 .将学生记录

学生信息管理系统java测试报告

package studentinformation; /**姓名 胡海靖 * 学号 20183609 * 班级 信1805-2 */ class ScoreInformation { private String stunumber;//学号 private String name;//姓名 private double mathematicsscore;//高等数学成绩 private double englishiscore;//大学英语成绩 private double networks

Java编写学生成绩管理系统

思路:定义两个类,一个scoreinformation类,一个scoremanagement类,scoreinformation类用于编写姓名,学号,以及各项成绩的输入函数,scoreinformation类有七个私有变量,和各个变量的get(),set()函数,scoremanagement类用于表现各项功能,包括学生信息的引入函数,学生信息的添加函数,学生信息的修改函数,学生成绩绩点的计算函数,以及退出系统的函数,在最后的主函数中,首先调用存储学生信息的函数,然后运用switch,case函