⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 stdb.cpp

📁 学生数据管理系统
💻 CPP
字号:
//Student Management Database v1.0

//Made By: Syed Muhammad Ali Kazmi (BCU/F02/0121)

//Description: Program to store information and marks of a student using
//			   Linked list and Record I/O

//Possible Enhancements:
//* Search (By Name, GPA etc.)
//* Sorting of records

#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include <dos.h>

#define INVALID -1


#define ALLOK 0
#define NODB1 1
#define NOSTD 2
#define NODB2 3
#define NOMSHT 4

#define A1 1
#define A 2
#define B1 3
#define B 4
#define C 5
#define D 6
#define E 7
#define F 8

#define DB1 "stdb.db"

struct MARKSHEET {
	int nScoreITP;
	int nScoreDLCA;
	int nScoreCal2;
	int nScoreDM2;
	int nScoreEthics;

};

struct STUDENT{

	int ID;
	char Name[31];
	char FatherName[31];
	long Phone;
	char Address[51];
	MARKSHEET MrkSht;
	STUDENT *ptrNext;
};

STUDENT *ptrStart = NULL;
int nRecs = 0;
int nMainRun = 0;

void main(void);

int CheckLength (char str[],int n)
{
	if ((strlen (str) > n) || (strlen (str) <= 0))
	{
		printf ("ERROR: String should not exceed %d characters.\n",n);
		return 0;
	}
	return 1;
}
char *GetGrade (float GPA)
{
	if (GPA >= 3.5 && GPA <= 4.0)
		return ("A+");
	else if (GPA >= 3.0 && GPA <= 3.4)
		return ("A");
	else if (GPA >= 2.7 && GPA <= 2.9)
		return ("B+");
	else if (GPA >= 2.4 && GPA <= 2.6)
		return ("B");
	else if (GPA >= 2.0 && GPA <= 2.3)
		return ("C");
	else if (GPA >= 3.0 && GPA <= 3.4)
		return ("D");
	else if (GPA >= 3.0 && GPA <= 3.4)
		return ("E");
	else
		return ("F");
}
float GetGPA (MARKSHEET Mrks, int &TotalMarks)
{
	int marks [5];
	float GPA = 0;

	marks [0] = Mrks.nScoreITP;
	marks [1] = Mrks.nScoreDLCA;
	marks [2] = Mrks.nScoreCal2;
	marks [3] = Mrks.nScoreDM2;
	marks [4] = Mrks.nScoreEthics;
	TotalMarks = marks[0]+marks[1]+marks[2]+marks[3]+marks[4];
	for (int i = 0; i < 5;i++)
	{
		if (marks[i] >= 85)
			GPA += 4;
		else if (marks[i] >= 80)
			GPA += 3.7;
		else if (marks[i] >= 75)
			GPA += 3.4;
		else if (marks[i] >= 70)
			GPA += 3;
		else if (marks[i] >= 65)
			GPA += 2.5;
		else if (marks[i] >= 60)
			GPA += 2;
		else if (marks[i] >= 55)
			GPA += 1.5;
		else if (marks[i] >= 50)
			GPA += 1;
		else if (marks[i] < 50)
			GPA += 0;
	}
	GPA = (GPA * 3)/15;
	return (GPA);
}
int putscntr (char a[],int y,int x = 0)
{   if (x == 0)
		x = 40 - strlen (a)/2;

	gotoxy (x,y);

	cputs (a);
	return (x);
}
int IDValid (int SearchID)
{
	int tmpID = -1;
	STUDENT *ptrSearch;
	if (nRecs == 0)
	{
		ptrStart = NULL;
		return (1);
	}
	ptrSearch = ptrStart;
	tmpID = ptrStart->ID;
	while (tmpID != SearchID)
	{

		ptrSearch = ptrSearch->ptrNext;
		if (ptrSearch == NULL)
			return (1);
		tmpID = ptrSearch->ID;
	}
	printf ("ERROR: Record with this ID already exists.");
	return (0);
}

void InitDB ()
{

	FILE *flDB1;
	STUDENT *ptrCursor = NULL;



	if ( (flDB1 = fopen(DB1,"rb")) != NULL)
	{   printf ("\nDataBase File Found...");

		ptrStart = (STUDENT *)malloc (sizeof (STUDENT));
		if ((fread (ptrStart, sizeof (STUDENT),1,flDB1)) == 0)
		{
			fclose (flDB1);
			ptrStart = (STUDENT *)NULL;

		}
		nRecs++;
		ptrCursor = ptrStart;

		while (1)
		{
			ptrCursor->ptrNext = (STUDENT *)malloc (sizeof (STUDENT));


			if ((fread (ptrCursor->ptrNext,sizeof (STUDENT),1,flDB1)) == 0)
			{
				fclose (flDB1);
				ptrCursor->ptrNext = (STUDENT *)NULL;
				break;
			}
			nRecs++;
			ptrCursor = ptrCursor->ptrNext;
		}
		if (nRecs == 0)
			printf ("Database Empty.");
		else
			printf ("\nDatabase contains %d records.",nRecs);




	}

	else
	{
		printf ("\nFile Not Found. Creating New DataBase...");

	}

}
int ShowMainMenu ()
{   int xmenu = 0;
	int nChoice;
	putscntr (" 赏屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯屯突 ",1);
	putscntr (" 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -