主要功能
1.学生信息的创建
开始运行时,初始数据有两个方式可以创建:1)从一个数据文件读入。数据文件的格式由代码编写人员根据程序设计的内容提供;2)从键盘输入。输入数据的格式在运行界面中提供。
2.学生信息的排序
1)根据学生总分排序并显示学生的所有信息;2)根据提供的姓名排序并显示学生的所有信息;
3.学生信息的增加
1)增加的数据可以从数据文件中读入;2)增加的数据可以从键盘输入;
4.学生信息的删除
1)根据提供的学号查找并删除学生信息;2)找不到时给出提示;
5.学生信息的修改
1)根据提供的学号查找并修改学生信息,可以只修改部分信息,由运行界面的交互信息来进行提示;2)找不到时给出提示;
6.学生信息的查找
1)根据提供的学号查找并显示该学生的所有信息;2)根据提供的姓名查找并显示该学生的所有信息;3)找不到时给出提示;
编译环境vs2008
头文件system.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<malloc.h>
#include<conio.h>
#include<string.h>
#pragma once
struct data
{ int year; //年
int month; //月
int day; //日
};
struct student
{ int snum; //学号
char name[20]; //姓名
char sex; //性别
struct data birthday; //出生日期
int score[5] ; //5门课程成绩
};
typedef struct node
{ struct student data;
struct node * next;
}Node,*PNode;
//链表实现
//链表初始化
void SListInit(PNode *Head);
//申请节点
PNode BuySListNode(int snum, char* name, char sex, int year, int month, int day,int* score);
//创建学生信息(列表创建)
int CreateStudentMessageList(PNode* head, int n);
//增加学生信息
int AddStudentMessageList(PNode* head, int snum, char* name, char sex, int year, int month, int day,int* score);
//删除学生信息
int DelStudentMessageList(PNode* head,int snum);
//修改学生信息
void AlterStudentMessageList(PNode pAlt, char* name, char sex, int year, int month, int day,int* score);
//查找学生信息(按学号)
void FindStudentMessageBySnumList(PNode* head,int snum);
//查找学生信息(按姓名)
void FindStudentMessageByNameList(PNode* head,char* name);
//打印学生信息
void PrintStudentMessageList(PNode pArr);
//学生按总分从大到小排序
void StudentMessageTotalSortList(PNode* head);
//学生按姓名排序
void StudentMessageNameSortList(PNode* head);
//创建学生信息(文件创建)
int CreateStudentMessageFile(PNode* head);
void _CreateStudentMessage(PNode* head,char msg[11][20]);
//最终封装函数
//主界面打印
void Printwindow(int n);
//创建学生信息
void CreateStudentMessage(PNode* head);
//增加学生信息
void AddStudentMessage(PNode* head);
//查看学生信息
void BrowseStudentMessage(PNode* head);
//修改学生信息
void AlterStudentMessage(PNode head);
//查找学生信息
void FindStudentMessage(PNode* head);
//删除学生信息
void DelStudentMessage(PNode* head);
//按总分排序后显示,或者按姓名排序后显示
void SortBrowseStudentMessage(PNode* head);
//保存信息
void SaveMessage(PNode* head);
//辅助函数
//字符串转换整型
int ChangeCharforInt(char* arr);
//整型转换字符串
char* ChangeIntforChar(int num);
//释放空间
void FreeMessageList(PNode* head);
头文件不做过多描述,主要包含了函数声明还有定义的结构体。
函数.c文件 system.c
#include"System.h"
头文件包含
void SListInit(PNode *Head)
{
assert(Head);
*Head = NULL;
}
头节点初始化
PNode BuySListNodeList(int snum, char* name, char sex, int year, int month, int day,int* score)
{
int i;
PNode pNewNode = (PNode)malloc(sizeof(Node));
if(NULL == pNewNode)
{
assert(0);
return NULL;
}
pNewNode->next = NULL;
pNewNode->data.snum = snum;
strcpy(pNewNode->data.name,name);
pNewNode->data.sex = sex;
pNewNode->data.birthday.day = day;
pNewNode->data.birthday.month = month;
pNewNode->data.birthday.year = year;
for(i=0; i<5; i++)
{
pNewNode->data.score[i] = score[i];
}
return pNewNode;
}
创建链表的新结点,把传过来对应的值放到新结点对应的变量处,strcpy(char* ch1,const char* ch2)函数是把字符串ch2(必须以\0结尾)拷贝到字符串ch1(空间必须足够容纳ch2)中。
int CreateStudentMessageList(PNode* head,int n)
{
int i = 0;
int flag = 0;
int t,k,j;
char message[100];
char msg[11][20];
while(i<n)
{
printf("请按照 学号 姓名 性别 出生日期 语文 数学 英语 科学 体育 的顺序输入每个学生的信息:");
if(0 == flag)
getchar();
gets(message);
t = 0;
k = 0;
while(message[k] != '\0' && t<11)
{
j = 0;
while(message[k] != ' ' && message[k] != '-' && message[k] != '\0')
{
msg[t][j] = message[k];
k++;
j++;
}
msg[t][j] = '\0';
t++;
k++;
}
_CreateStudentMessage(head,msg);
i++;
f