用C语言编程实现学生基本信息管理系统

包含如下主要模块: 学生信息录入子模块:可以进行学生基本信息的录入,包括学生的姓名、学号、课程成绩等基本信息。 学生信息查询子模块:方便快速的查找某一学生的基本信息。可按照学生的姓名、学号、课程成绩分别进行查找。 更新学生信息子模块:可以随时更改学生的某些信息,包括学生的姓名、学号、课程成绩等信息的更改。基本要求:1、 在内存中构建学生信息管理系统,信息管理系统的所有学生信息数据保存在硬盘的文本文件stuinfo.txt(里面有若干行,每行内容对应一个学生信息name:abc stunum:1002498 dsscore:65 xxlscore:76)中。实现类似于如下图所示的信息管理系统菜单界面。2、 构建有序单向链表(排序用关键字是数据结构成绩dsscore)。3、 构建指针数组,用于学生信息的排序(排序用关键字是信息论成绩xxlscore)。4、 构建查找二叉树(关键字是学号stunum)。5、 构建哈希表(关键字是姓名name)。6、 实现允许使用不同的关键字进行学生信息的查找。7、 实现在终端手工输入学生信息,添加至学生信息管理系统,同时更新硬盘上的文本文件。8、 实现按学生姓名找到待修改的学生信息,并修改学生信息(包括学生姓名),同时更新硬盘上的文本文件。9、 实现按学生姓名找到待删除的学生信息,从管理系统中删除学生信息,同时更新硬盘上的文本文件。10、实现按成绩升序、降序打印输出学生信息(使用递归算法);按学号升序打印输出学生信息(非递归中序遍历);统计并打印各分数段的百分比,平均分,及格率及不及格率。11、实现完全销毁内存中的学生信息管理系统。

以前做过的类似的一个 你拿去看看改改

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define BUFSIZE  1024
#define WORDSIZE  32
#define DESTSIZE 512
#define NR 26
struct node_st {
 struct node_st *arr[NR];
 char *str;
};
static int pos_hash(char ch)
{
 return ch - 'a';
}
static int read_file(FILE *fp, char *word, char *dest)
{
 char buf[BUFSIZE] = {}; 
 if (fgets(buf, BUFSIZE, fp) == NULL)
  return -1;
 buf[strlen(buf)-1] = 0;
 sscanf(buf, "%s %s", word, dest);
 return 0;
}
static void tree_insert(struct node_st **root, const char *word, const char *dest)
{
 struct node_st *new;
 int i;
 if (*root == NULL) {
  new = malloc(sizeof(*new)); 
  //if error
  for (i = 0; i < NR; i++)
   (new->arr)[i] = NULL;
  new->str = NULL;
  *root = new; 
 }
 if (*word == '\0') {
  (*root)->str = strdup(dest);
  return;
 }
 tree_insert(&((*root)->arr)[pos_hash(*word)], word+1, dest);
}
static char *tree_search(struct node_st *root, char *word)
{
 if (root == NULL)
  return NULL; 
 if (*word == '\0')
  return root->str;
 tree_search((root->arr)[pos_hash(*word)], word+1);
}
int main(int argc, char **argv)
{
 FILE *fp;
 struct node_st *root = NULL;
 char word[WORDSIZE] = {};
 char dest[DESTSIZE] = {};
 char *ret;
 if (argc < 3)
  return 1;
 fp = fopen(argv[1], "r");
 //if error
 while (1) {
  if (read_file(fp, word, dest) < 0)
   break;
  tree_insert(&root, word, dest);
  
  memset(word, '\0', WORDSIZE);
  memset(dest, '\0', DESTSIZE);
 }
#if 1
 if ((ret = tree_search(root, argv[2])) == NULL)
  printf("the word is wrong\n");
 else
  printf("%s: %s\n", argv[2], ret);
#endif
 return 0;
}

 悬赏50也来求答案。送个红包吧

温馨提示:答案为网友推荐,仅供参考
相似回答