?? stdb.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 + -