Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <conio.h>
- #include <stdlib.h>
- #include <string.h>
- struct addinf {
- char date[10]; // дата зачисления
- float GradePoint; //средний балл
- };
- struct info {
- int NumOfBook; // номер зачётки
- char *surname;
- addinf inf;
- };
- void Enterinf();
- void findstudents(int n, struct info *students, char sfind[]);
- void RemoveStudents(int n, struct info *students, int num);
- int main() {
- Enterinf();
- rewind(stdin);
- _getch();
- return 0;
- }
- void Enterinf() {
- int n, num, size = 0;
- struct info *students;
- char c, *FindStudent;
- printf(" Enter number of students: ");
- while (!scanf_s("%d", &n) || n < 1) {
- printf(" wrong input, try again\n");
- rewind(stdin);
- }
- while (!(students = (struct info*)malloc(n * sizeof(struct info)))) {
- printf("Allocating error");
- _getch();
- exit(1);
- }
- for (int i = 0; i < n; i++) {
- printf(" Student %d\n ", i + 1);
- printf("Number of record book: ");
- while (!scanf_s("%d", &students[i].NumOfBook) || students[i].NumOfBook < 0) {
- printf(" wrong input, try again: ");
- rewind(stdin);
- }
- rewind(stdin);
- printf(" Student's surname: ");
- students[i].surname = (char*)malloc(sizeof(char));
- while ((c = getchar()) != '\n') {
- size++;
- students[i].surname = (char*)realloc(students->surname, (1 + size) * sizeof(char));
- students[i].surname[size - 1] = c;
- students[i].surname[size] = '\0';
- }
- size = 0;
- rewind(stdin);
- printf(" Enrollment date (DD.MM.YYYY) : ");
- while (!scanf_s("%s", &students[i].inf.date) || students[i].inf.date[2] != '.' || students[i].inf.date[5] != '.') {
- printf("\n Incorrect date, try again: ");
- rewind(stdin);
- }
- printf(" Grade point average: ");
- while (!scanf_s("%f", &students[i].inf.GradePoint) || students[i].inf.GradePoint > 10 || students[i].inf.GradePoint < 0) {
- printf("\n wrong gpa, try again");
- rewind(stdin);
- }
- }
- printf("\n Enter student's surname, who you want to find: ");
- size = 0;
- FindStudent = (char*)malloc(sizeof(char));
- rewind(stdin);
- while ((c = getchar()) != '\n') {
- size++;
- FindStudent = (char*)realloc(FindStudent, (1 + size) * sizeof(char));
- FindStudent[size - 1] = c;
- FindStudent[size] = '\0';
- }
- printf("\n Enter a number of record book to delete: ");
- while (!scanf_s("%d", &num)) {
- printf("\nwrong input, try again: ");
- rewind(stdin);
- }
- findstudents(n, students, FindStudent);
- RemoveStudents(n, students, num);
- free(students);
- }
- void findstudents(int n, struct info* students, char FindStudent[]) {
- int i;
- for (i = 0; i < n; i++) {
- if (strcmp(students[i].surname, FindStudent) == 0) {
- printf("\n find a student:\n Number of RB: %d\n Surname %s\n Enrollment date: %s\n GPA: %.1f",
- students[i].NumOfBook, students[i].surname, students[i].inf.date, students[i].inf.GradePoint);
- }
- }
- }
- void RemoveStudents(int n, struct info *students, int num) {
- int i, size;
- size = n;
- for (i = 0; i < n; i++) {
- if (students[i].NumOfBook < num) {
- students[i].NumOfBook = students[i + 1].NumOfBook;
- size--;
- }
- }
- if (size < 0) {
- students = (struct info*)realloc(students, size * sizeof(struct info));
- printf("\n updated list\n");
- for (i = 0; i < size; i++) {
- printf("%s - %d\n", students[i].surname, students[i].NumOfBook);
- }
- } else {
- printf("no one find");
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement