简易学生管理系统
- 一、实验功能的整体描述
- 二、程序的总体结构描述
- 三、各个子功能如何实现
- 四、遇到的问题解决方法
- 五、C源代码分享与交流
一、实验功能的整体描述
二、程序的总体结构描述
三、各个子功能如何实现
四、遇到的问题解决方法
五、C源代码分享与交流
#define _CRT_SECURE_NO_WARNINGS 1
#include
#include
#define NUM 50
typedef struct student
{
char no[NUM];
char name[NUM];
short age;
char gender[NUM];
}Student;
typedef struct course
{
char name[NUM];
float point;
}Course;
typedef struct link
{
char student_no[NUM];
char course_name[NUM];
short score;
}Link;
Student student_list[100];
int student_count=0;
Course course_list[100];
int course_count=0;
Link link_list[100];
int link_count=0;
void list_student();
void list_course();
void list_link();
void add_student();
void add_course();
void add_link();
void delete_student();
void delete_course();
void delete_link();
void query_student();
void query_course();
int main()
{
FILE*fp;
char buffer[100];
char choice;
fp=fopen("student.txt","r");
while(fgets(buffer,100,fp))
{
sscanf(buffer,"%s %s %d %s",student_list[student_count].no,student_list[student_count].name,&student_list[student_count].age,student_list[student_count].gender);
student_count++;
}
fclose(fp);
fp=fopen("course.txt","r");
while(fgets(buffer,100,fp))
{
sscanf(buffer,"%s %f",course_list[course_count].name,&course_list[course_count].point);
course_count++;
}
fclose(fp);
fp=fopen("link.txt","r");
while(fgets(buffer,100,fp))
{
sscanf(buffer,"%s %s %d",link_list[link_count].student_no,link_list[link_count].course_name,&link_list[link_count].score);
link_count++;
}
fclose(fp);
do{
printf("1. add student\n");
printf("2. remove student\n");
printf("3. list student\n");
printf("4. add course\n");
printf("5. remove course\n");
printf("6. list course\n");
printf("7. add link\n");
printf("8. remove link\n");
printf("9. list link\n");
printf("A. query student\n");
printf("B. query course\n");
printf("C. quit\n");
printf("Choice: ");
scanf(" %c", &choice);
switch (choice) {
case '1':
add_student();
break;
case '2':
delete_student();
break;
case '3':
list_student();
break;
case '4':
add_course();
break;
case '5':
delete_course();
break;
case '6':
list_course();
break;
case '7':
add_link();
break;
case '8':
delete_link();
break;
case '9':
list_link();
break;
case 'A':
query_student();
break;
case 'a':
query_student();
break;
case 'B':
query_course();
break;
case 'b':
query_course();
break;
case 'C':
printf("谢谢使用!\n");
break;
case 'c':
printf("谢谢使用!\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
} while (choice != 'C');
return 0;
}
void list_student(){
int i;
printf("学号\t姓名\t年龄\t性别\n");
for(i=1;i<student_count;i++)
{
printf("%s\t%-8.8s%d\t%s\n",student_list[i].no,student_list[i].name,student_list[i].age,student_list[i].gender);
}
}
void list_course(){
int i;
printf("名称 学分\n");
for(i=1;i<course_count;i++)
{
printf("%s\t%.1f\t\n",course_list[i].name,course_list[i].point);
}
}
void list_link(){
int i;
printf("学号\t课程\t分数\n");
for(i=1;i<link_count;i++)
{
printf("%s\t%s\t%d\n",link_list[i].student_no,link_list[i].course_name,link_list[i].score);
}
}
void add_student()
{
printf("请输入学生信息:\n");
printf("学号: ");
scanf(" %s",student_list[student_count].no);
printf("姓名: ");
scanf(" %s",student_list[student_count].name);
printf("年龄: ");
scanf(" %d",&student_list[student_count].age);
printf("性别: ");
scanf(" %s",student_list[student_count].gender);
student_count++;
}
void add_course(){
printf("请输入课程信息:\n");
printf("名称: ");
scanf(" %s",course_list[course_count].name);
printf("学分: ");
scanf(" %f",&course_list[course_count].point);
course_count++;
}
void add_link(){
printf("请输入关联信息:\n");
printf("学号: ");
scanf(" %s",link_list[link_count].student_no);
printf("课程: ");
scanf(" %s",link_list[link_count].course_name);
printf("成绩: ");
scanf(" %d",&link_list[link_count].score);
link_count++;
}
void delete_student(){
char student_no[NUM];
int i;
int index=-1;
printf("请输入要删除学生信息的学生学号: ");
scanf(" %s",&student_no);
for(i=0;i<student_count;i++){
if(strcmp(student_list[i].no,student_no)==0)
{
index=i;
}
}
if(index==-1)
{
printf("未查询到该名学生\n");
}
else
{
for(i=index;i<student_count-1;i++)
{
student_list[i]=student_list[i+1];
}
student_count--;
}
}
void delete_course(){
char course_no[NUM];
int i;
int index=-1;
printf("请输入要删除课程信息的课程名称: ");
scanf(" %s",&course_no);
for(i=0;i<course_count;i++){
if(strcmp(course_list[i].name,course_no)==0)
{
index=i;
}
}
if(index==-1)
{
printf("未找到该课程,请再次输入课程名称: ");
scanf(" %s",&course_no);
}
else
{
for(i=index;i<course_count-1;i++)
{
course_list[i]=course_list[i+1];
}
course_count--;
}
}
void delete_link()
{
char link_no[NUM];
char link_course[NUM];
int i;
int index=-1;
printf("请输入要删除关联信息的学生学号: ");
scanf(" %s",&link_no);
printf("请输入要删除关联信息的课程名称: ");
scanf(" %s",&link_course);
for(i=0;i<link_count;i++){
if(strcmp(link_list[i].student_no,link_no)==0&&strcmp(link_list[i].course_name,link_course)==0)
{
index=i;
}
}
if(index==-1)
{
printf("未找到该关联信息\n");
}
else
{
for(i=index;i<link_count-1;i++)
{
link_list[i]=link_list[i+1];
}
link_count--;
}
}
void query_student(){
int i;
int j=0;
int flag=1;
int count=0;
char student_no[NUM];
Link query_student[NUM];
printf("请输入想要查询课程成绩的学生学号: ");
scanf(" %s",student_no);
for(i=0;i<link_count;i++)
{
if(strcmp(link_list[i].student_no,student_no)==0)
{
query_student[j]=link_list[i];
flag=0;
j++;
count++;
}
}
if(flag==1)
{
printf("未查询到该同学相关课程信息!\n");
}
if(flag==0){
printf("课程\t分数\n");
for(i=0;i<count;i++)
{
printf("%s\t%d\n",query_student[i].course_name,query_student[i].score);
}
}
}
void query_course(){
int i=0;
int j=0;
int k=0;
int flag=1;
int count=0;
char course_name[NUM];
Link query_course[NUM];
Link course_switch[NUM];
printf("请输入想要查询课程名称 ");
scanf(" %s",course_name);
for(i=0;i<link_count;i++)
{
if(strcmp(link_list[i].course_name,course_name)==0)
{
query_course[j]=link_list[i];
flag=0;
j++;
count++;
}
}
if(flag==1)
{
printf("未查询到该课程相关成绩信息!\n");
}
if(flag==0){
printf("学号\t分数\n");
for(i=0;i<count;i++)
{
printf("%s\t%d\n",query_course[i].student_no,query_course[i].score);
}
}
}