实验十五C语言程序综合设计一、目的与要求1、掌握用C语言进行简单的数据库管理。
2、掌握运用C语言进行综合程序设计的方法3、理解链表的概念及应用。
二、实验内容和步骤建立一个链表,每个结点包括学号、姓名、及三科成绩、平均成绩。
除平均成绩外,各项均由键盘输入。
要求:(A)计算平均成绩。
(B)要实现插入功能。
(C)要有排序功能。
(D)要有存取功能。
参考程序:#include <stdio.h>struct SStudent{unsigned number;char name[11];int score1, score2, score3;struct SStudent * link;};struct SStudent * CreateTable();void AppendToTable(struct SStudent * stu);void InsertToTable(struct SStudent * stu);void QueryTable(struct SStudent * stu, unsigned age);void SortTable(struct SStudent * stu);void PrintTable(struct SStudent * stu);void Save(struct SStudent * stu);void Load(struct SStudent * stu);void Help();void main(){struct SStudent * student;unsigned number;char keyValue;student = CreateTable();clrscr();Help();printf("\n= ");while((keyValue = getche()) != 'q' && keyValue != 'Q' && keyValue != 27){puts("");switch(keyValue){case 'l': case 'L':PrintTable(student); break;case 'd': case 'D':printf("Please input the number you want delete: ");scanf("%d", &number);QueryTable(student, number);break;case 'a': case 'A':AppendToTable(student); break;case 'i': case 'I':InsertToTable(student); break;case 's': case 'S':SortTable(student);puts("Sort complished! Please use command L to list.");break;case 'v': case 'V':Save(student); break;case 'o': case 'O':Load(student); break;case 'c': case 'C':clrscr(); break;case 'h': case 'H':Help(); break;default: puts("Error command!");}printf("\n= ");}}struct SStudent * CreateTable(){struct SStudent * stu;stu = (struct SStudent *) malloc(sizeof(struct SStudent));stu->number = 0;stu->score1 = stu->score2 = stu->score3 = 0;stu->name[0] = '\0';stu->link = NULL;return(stu);}void AppendToTable(struct SStudent * stu){struct SStudent * next, * last;int number;last = stu;while(last->link) last = last->link;printf("Please input the number (0 to quit): ");scanf("%d", &number);while(number){next = (struct SStudent *) malloc(sizeof(struct SStudent)); next->number = number;printf("Please input name: ");scanf("%10s", next->name);printf("Please input the first score: ");scanf("%d", &next->score1);printf("Please input the second score: ");scanf("%d", &next->score2);printf("Please input the third score: ");scanf("%d", &next->score3);last->link = next;last = last->link;printf("\nPlease input the number (0 to quit): ");scanf("%d", &number);}last->link = NULL;}void InsertToTable(struct SStudent * stu){struct SStudent * next, * last;int number;printf("Please input the number (0 to quit): ");scanf("%d", &number);while(number){next = (struct SStudent *) malloc(sizeof(struct SStudent)); next->number = number;printf("Please input name: ");scanf("%10s", next->name);printf("Please input the first score: ");scanf("%d", &next->score1);printf("Please input the second score: ");scanf("%d", &next->score2);printf("Please input the third score: ");scanf("%d", &next->score3);last = stu;while(last->link){if(last->link->number > next->number){next->link = last->link;last->link = next;break;}else last = last->link;}printf("\nPlease input the number (0 to quit): ");scanf("%d", &number);}}void QueryTable(struct SStudent * stu, unsigned number){struct SStudent * temp, * next;next = stu;while(next->link){if(next->link->number == number){temp = next->link;next->link = next->link->link;free(temp);}else next = next->link;}}void PrintTable(struct SStudent * stu){stu = stu->link;if(!stu){puts("The table is EMPTY!");return;}printf("number\tname\t\tscore1\tscore2\tscore3\n");while(stu){printf("%3d\t", stu->number);printf("%-10s\t", stu->name);printf("%4d\t", stu->score1);printf("%4d\t", stu->score2);printf("%4d\t\n", stu->score3);stu = stu->link;}}void SortTable(struct SStudent * stu){struct SStudent * next, * last, * temp;int flag;last = stu;while(last->link){next = stu; flag = 1;while(next->link != last->link){if(next->link->number > last->link->number){temp = last->link;last->link = last->link->link;temp->link = next->link;next->link = temp;flag = 0;break;}else next = next->link;}if(flag) last = last->link;}}void Save(struct SStudent * stu){unsigned char filename[13];FILE * fileSave;printf("Please input the filename you want save in: "); scanf("%s", filename);if((fileSave = fopen(filename, "wb")) == 0){printf("Cannot open file %s !\n", filename);return;}puts("Saveing ...");stu = stu->link;while(stu){fwrite(stu, sizeof(struct SStudent), 1, fileSave);stu = stu->link;}puts("Saveing is finished!");}void Load(struct SStudent * stu){unsigned char filename[13];FILE * fileLoad;struct SStudent * temp;while(stu->link){temp = stu->link;stu->link = stu->link->link;free(temp);}temp = (struct SStudent *) malloc(sizeof(struct SStudent));printf("Please input the filename you want load from: ");scanf("%s", filename);if((fileLoad = fopen(filename, "rb")) == 0){printf("Cannot open file %s !\n", filename);return;}puts("Loading ...");while(fread(temp, sizeof(struct SStudent), 1, fileLoad)){stu->link = temp;stu = stu->link;temp = (struct SStudent *) malloc(sizeof(struct SStudent));}stu->link = NULL;puts("loading is finished!");}void Help(){ puts(" *********************************************");puts(" * Student System Command Help *");puts(" *********************************************");puts(" * L = List all records *");puts(" * D = Delete a record seleced by number *");puts(" * A = Append records *");puts(" * I = Insert records *"); puts(" * S = Sort records *");puts(" * H = Show this help message *");puts(" * V = Save records to a file *");puts(" * O = Load records from a file *");puts(" * C = Clear screen *");puts(" * Q = Quit System *");puts(" *********************************************");puts(" * Copyright (C) 1999.09.09 By Kcliu *");puts(" *********************************************");}。