forked from pi7mcrg2k/ScoreManagementSystem
parent
c0d413ace8
commit
7cf49abbab
@ -0,0 +1,267 @@
|
|||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
// ¶¨ÒåѧÉú½á¹¹Ìå
|
||||||
|
typedef struct Student {
|
||||||
|
char id[20];
|
||||||
|
char clas[20];
|
||||||
|
char name[20];
|
||||||
|
double score1, score2, score3, totalScore;
|
||||||
|
} Student;
|
||||||
|
|
||||||
|
#define MAX_STUDENTS 100
|
||||||
|
Student students[MAX_STUDENTS];
|
||||||
|
int count = 0;
|
||||||
|
|
||||||
|
void menu();
|
||||||
|
void input();
|
||||||
|
void delete();
|
||||||
|
void select();
|
||||||
|
void sort();
|
||||||
|
void output();
|
||||||
|
|
||||||
|
int main() {
|
||||||
|
char option;
|
||||||
|
|
||||||
|
while (1) {
|
||||||
|
menu();
|
||||||
|
printf("please input your option: ");
|
||||||
|
scanf(" %c", &option);
|
||||||
|
|
||||||
|
switch (option) {
|
||||||
|
case '1':
|
||||||
|
input();
|
||||||
|
break;
|
||||||
|
case '2':
|
||||||
|
delete();
|
||||||
|
break;
|
||||||
|
case '3':
|
||||||
|
select();
|
||||||
|
break;
|
||||||
|
case '4':
|
||||||
|
sort();
|
||||||
|
break;
|
||||||
|
case '5':
|
||||||
|
output();
|
||||||
|
break;
|
||||||
|
case '6':
|
||||||
|
printf("Exiting.\n");
|
||||||
|
return 0;
|
||||||
|
default:
|
||||||
|
printf("Invalid option.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
void menu() {
|
||||||
|
printf("\n");
|
||||||
|
printf("1.input\n");
|
||||||
|
printf("2.delete\n");
|
||||||
|
printf("3.select\n");
|
||||||
|
printf("4.order\n");
|
||||||
|
printf("5.output\n");
|
||||||
|
printf("6.quit\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void input() {
|
||||||
|
while (1) {
|
||||||
|
if (count >= MAX_STUDENTS) {
|
||||||
|
printf("Maximum number of students reached.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
Student buffer;
|
||||||
|
printf("Id: ");
|
||||||
|
scanf("%s", buffer.id);
|
||||||
|
printf("Class: ");
|
||||||
|
scanf("%s", buffer.clas);
|
||||||
|
printf("Name: ");
|
||||||
|
scanf("%s", buffer.name);
|
||||||
|
printf("Score1: ");
|
||||||
|
scanf("%lf", &buffer.score1);
|
||||||
|
printf("Score2: ");
|
||||||
|
scanf("%lf", &buffer.score2);
|
||||||
|
printf("Score3: ");
|
||||||
|
scanf("%lf", &buffer.score3);
|
||||||
|
|
||||||
|
buffer.totalScore = buffer.score1 + buffer.score2 + buffer.score3;
|
||||||
|
students[count++] = buffer;
|
||||||
|
|
||||||
|
char cont[4];
|
||||||
|
printf("continue? (yes/no): ");
|
||||||
|
scanf("%s", cont);
|
||||||
|
if (cont[0] == 'n') break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void delete() {
|
||||||
|
if (count == 0) {
|
||||||
|
printf("No students.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
char key[20];
|
||||||
|
printf("Enter student ID or name to delete: ");
|
||||||
|
scanf("%s", key);
|
||||||
|
|
||||||
|
int i, boo1 = 0;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (strcmp(students[i].id, key) == 0 || strcmp(students[i].name, key) == 0) {
|
||||||
|
boo1 = 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
int j;
|
||||||
|
if (boo1) {
|
||||||
|
for (j = i; j < count - 1; j++) {
|
||||||
|
students[j] = students[j + 1];
|
||||||
|
}
|
||||||
|
count--;
|
||||||
|
printf("Student deleted successfully.\n");
|
||||||
|
output();
|
||||||
|
} else {
|
||||||
|
printf("Student not found.\n");
|
||||||
|
output();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// void select() {
|
||||||
|
// char key[20];
|
||||||
|
// printf("Enter student ID, name, or class to search: ");
|
||||||
|
// scanf("%s", key);
|
||||||
|
|
||||||
|
// int boo1 = 0;
|
||||||
|
// int i;
|
||||||
|
// for (i = 0; i < count; i++) {
|
||||||
|
// if (strcmp(students[i].id, key) == 0 || strcmp(students[i].name, key) == 0 || strcmp(students[i].clas, key) == 0) {
|
||||||
|
// printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
// students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
// boo1 = 1;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// if (!boo1) {
|
||||||
|
// printf("No eligible student found.\n");
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
void select() {
|
||||||
|
char input[50];
|
||||||
|
printf("Enter your query (e.g., 1 classNum-classNum, 2 idNum-idNum, 3 namePrefix*, 4 minScore, 5 classNum.idNum-idNum): ");
|
||||||
|
scanf(" %[^\n]", input);
|
||||||
|
|
||||||
|
int type = input[0] - '0';
|
||||||
|
char condition[50];
|
||||||
|
strcpy(condition, input + 2);
|
||||||
|
|
||||||
|
int boo1 = 0;
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case 1: {
|
||||||
|
int startClass, endClass;
|
||||||
|
sscanf(condition, "%d-%d", &startClass, &endClass);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
int class = atoi(students[i].clas);
|
||||||
|
if (class >= startClass && class <= endClass) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
boo1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 2: {
|
||||||
|
int startId, endId;
|
||||||
|
sscanf(condition, "%d-%d", &startId, &endId);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
int id = atoi(students[i].id);
|
||||||
|
if (id >= startId && id <= endId) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
boo1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 3: {
|
||||||
|
char prefix[20];
|
||||||
|
sscanf(condition, "%s", prefix);
|
||||||
|
int prefixLen = strlen(prefix) - 1;
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (strncmp(students[i].name, prefix, prefixLen) == 0) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
boo1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 4: {
|
||||||
|
double minScore;
|
||||||
|
sscanf(condition, "%lf", &minScore);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
if (students[i].totalScore >= minScore) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
boo1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case 5: {
|
||||||
|
int class, startId, endId;
|
||||||
|
sscanf(condition, "%d.%d-%d", &class, &startId, &endId);
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
int studentClass = atoi(students[i].clas);
|
||||||
|
int studentId = atoi(students[i].id);
|
||||||
|
|
||||||
|
if (studentClass == class && studentId >= startId && studentId <= endId) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
boo1 = 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
printf("Invalid query type.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!boo1) {
|
||||||
|
printf("No eligible student found.\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void sort() {
|
||||||
|
int i, j;
|
||||||
|
for (i = 0; i < count - 1; i++) {
|
||||||
|
for (j = i + 1; j < count; j++) {
|
||||||
|
if (strcmp(students[i].clas, students[j].clas) > 0 ||
|
||||||
|
(strcmp(students[i].clas, students[j].clas) == 0 && students[i].totalScore < students[j].totalScore)) {
|
||||||
|
Student temp = students[i];
|
||||||
|
students[i] = students[j];
|
||||||
|
students[j] = temp;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
printf("Students sorted successfully.\n");
|
||||||
|
output();
|
||||||
|
}
|
||||||
|
|
||||||
|
void output() {
|
||||||
|
if (count == 0) {
|
||||||
|
printf("No students to display.\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
int i;
|
||||||
|
for (i = 0; i < count; i++) {
|
||||||
|
printf("%s %s %s %.1f %.1f %.1f %.1f\n", students[i].id, students[i].clas, students[i].name,
|
||||||
|
students[i].score1, students[i].score2, students[i].score3, students[i].totalScore);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue