| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1573 人关注过本帖
标题:简单的成绩管理系统,课程设计时做的,非常非常简陋
只看楼主 加入收藏
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
 问题点数:0 回复次数:3 
简单的成绩管理系统,课程设计时做的,非常非常简陋

下面是源代码下载连接

4qrNlgOk.rar (9.34 KB) 简单的成绩管理系统,课程设计时做的,非常非常简陋

下面我也把源代码贴一下,方便大家为我指针正错误,谢谢。。 /* lnklst.h */ #ifndef __LNKLST_H #define __LNKLST_H

#include "lnklst.cpp"

extern struct student *create(char *,int,float,float,float); extern struct student *linear_search(char *); extern void add_stu(struct student *); extern void del_stu(int); extern void insert_stu(struct student *); extern void display_all(void); extern int item_count(void); extern void free_lnklst(void);

#endif /* lnklst.cpp */ #define MAX_NAME 16

/* 学生档案结构 */ struct student { char name[MAX_NAME]; /* 学生姓名 */ int stuid; /* 学生学号 */ float chinese; /* 语文成绩 */ float math; /* 数学成绩 */ float english; /* 英语成绩 */ struct student *prev; /* 链表的前一项 */ struct student *next; /* 链表的后一项 */ };

typedef unsigned char BOOL;

struct student *head; /* 链表表头 */ struct student *curpos; /* 当前指针 */

void display_all(void) { struct student *p=head; if(!p) { printf("The list is empty!\n"); return ; } while(p) { printf("%s,%d,%f,%f,%f\n",p->name,p->stuid,p->chinese,p->math,p->english); p=p->next; } }

struct student *create(char *name,int stuid,float chn,float math,float en) { /* 根据传入的参数,创建一个学生结构体 */ struct student *stu; /* 给声明的结构体指针分配内存 */ stu=(struct student *)malloc(sizeof(struct student)); if(!stu) /* 如果无法分配内存 */ { printf("Cannot allocate memory for structure!\n"); exit(1); /* 强制终止程序 */ } stu->stuid=stuid; strcpy(stu->name,name); stu->chinese=chn; stu->math=math; stu->english=en; return stu; /* 将创建的结构体指针传递给函数 */ }

void add_stu(struct student *stu) { /* 向链表中添加新的结构体 */ if(!head) /* 如果表头为空,则将结构体添加到表头 */ { head=stu; curpos=head; head->next=NULL; /* 后一项无数据,设为NULL */ head->prev=NULL; /* 前一项无数据,设为NULL */ } else { curpos->next=stu; stu->prev=curpos; stu->next=NULL; curpos=curpos->next; } }

struct student *linear_search(char *name) { /* 根据传入的名字,查找相应的记录 */ struct student *stu; stu=head; while(stu) { if(!strcmp(stu->name,name)) return stu; stu=stu->next; } printf("No such student record in the linked list!\n"); return NULL; }

void del_stu(int stuid) { /* 根据学号删除学生 */ struct student *stu; stu=head; while(stu) { if(stu->stuid==stuid) { struct student *bak; if(stu->prev&&stu->next) { bak=stu->prev; bak->next=stu->next; bak=bak->next; bak->prev=stu->prev; } else if(!stu->prev&&stu->next) { head=stu->next; head->prev=NULL; } else if(stu->prev&&!stu->next) { bak=stu->prev; bak->next=NULL; } if(stu->name) free(stu->name); free(stu); } stu=stu->next; } printf("No such student can be removed from the linked list!\n"); }

void insert_stu(struct student *stu) { struct student *p=head,*baknext,*bakprev,*bak; while(p) { baknext=p->next; if(baknext) { if(((stu->stuid)<=(baknext->stuid))&&((stu->stuid)>=(p->stuid))) { stu->prev=p; p->next=stu; baknext->prev=stu; stu->next=baknext; return; } } else add_stu(stu); p=p->next; } }

int item_count(void) { struct student *p=head; int c=0; while(p) { c++; p=p->next; } return c; }

void free_lnklst(void) { /* 释放链表 */ struct student *p=head,*bak; while(p) { bak=p->next; //if(p->name) free(p->name); free(p); p=bak; } }

搜索更多相关主题的帖子: 课程 系统 管理 设计 
2005-07-11 13:31
yuki
Rank: 2
等 级:新手上路
威 望:5
帖 子:508
专家分:0
注 册:2005-2-4
收藏
得分:0 

/* mainapp.cpp */ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <conio.h>

#include "lnklst.h"

char *menu[9]={ "a. Create a record\n", "b. Add to the linked list\n", "c. Delete a record from the linked list\n", "d. Insert a record to the linked list\n", "e. Search a record & display it\n", "f. Display the linked list\n", "g. Save\n", "h. Load\n", "i. Exit\n" };

void print_intro(void); void print_menu(void); char input_func(void);

void func_a(void); void func_b(void); void func_c(void); void func_d(void); void func_e(void); void func_f(void); void func_g(void); void func_h(void); void func_i(void);

extern struct student *head; struct student *stu;

int main() { print_intro(); char answer; do { print_menu(); answer=input_func(); printf("\n\n"); switch(answer) { case 'a': case 'A': func_a(); break; case 'b': case 'B': func_b(); break; case 'c': case 'C': func_c(); break; case 'd': case 'D': func_d(); break; case 'e': case 'E': func_e(); break; case 'f': case 'F': func_f(); break; case 'g': case 'G': func_g(); break; case 'h': case 'H': func_h(); break; case 'i': case 'I': func_i(); break; default : continue; } printf("\n"); }while(answer!='i'&&answer!='I'); return 1; }

void print_intro(void) { printf("Student's marks management system version 1.0\n"); printf("Created by Fang Cheng\n\n"); }

void print_menu(void) { int i; for(i=0;i<9;i++) printf("%s",menu[i]); printf("\n"); }

char input_func(void) { char cAnswer; printf("Input operation id (a,b,c,d,e,f,g,h): "); cAnswer = getch(); return cAnswer; }

void func_a(void) { char name[MAX_NAME]; int stuid; float a,b,c; printf("Please input a record you want to create\n"); printf("Input format hint: <name> <stuid> <chinese> <math> <english>\n"); scanf("%s %d %f %f %f",name,&stuid,&a,&b,&c); if(!stuid) { printf("Cannot create a record with stuid=0\n"); return; } else { stu=create(name,stuid,a,b,c); printf("Record has successfully created.\n"); } }

void func_b(void) { if(!stu) { printf("Noting can be added to the linked list!\n"); return ; } else { add_stu(stu); stu=NULL; printf("Add completed!\n"); } }

void func_c(void) { int stuid; printf("Please input the stuid you want to delete.\n"); scanf("%d",&stuid); if(!stuid) { printf("Cannot delete a record with stuid=0\n"); return ; } else { del_stu(stuid); printf("Delete completed!\n"); } }

void func_d(void) { if(!stu) { printf("Nothing can be inserted to the linked list!\n"); return ; } else { insert_stu(stu); stu=NULL; printf("Insert completed!\n"); } }

void func_e(void) { char name[MAX_NAME]; struct student *p; printf("Please input the name you want to search\n"); scanf("%s",name); p=linear_search(name); if(p) { printf("The record has searched below\n"); printf("%s,%d,%f,%f,%f\n",p->name,p->stuid,p->chinese,p->math,p->english); } }

void func_f(void) { display_all(); }

void func_g(void) { int c=item_count(); if(c) { FILE *fp; char path[80]; struct student *p=head; printf("Please input a data filename you want to save as\n"); scanf("%s",path); fp=fopen(path,"w"); if(!fp) { printf("Cannot open file for writing!\n"); return ; } while(p) { fprintf(fp,"%s %d %f %f %f\n",p->name,p->stuid,p->chinese,p->math,p->english); p=p->next; } printf("Save completed!\n"); fclose(fp); } else { printf("There is nothing to be saved.\n"); return ; } }

void func_h(void) { FILE *fp; char path[80]; char name[MAX_NAME]; int stuid; float a,b,c; struct student *p; printf("Please input a data filename you want to load from\n"); scanf("%s",path); fp=fopen(path,"r"); if(!fp) { printf("Cannot open file for reading!\n"); return ; } free_lnklst(); while(!feof(fp)) { if(fscanf(fp,"%s %d %f %f %f\n",name,&stuid,&a,&b,&c)) p=create(name,stuid,a,b,c); add_stu(p); } fclose(fp); printf("Load complete!\n"); }

void func_i(void) { free_lnklst(); printf("Have a nice day! Bye Bye!\n"); getch(); }


我们都在命运湖上荡舟划桨,波浪起伏使我们无法逃离孤行;如果我们迷失方向,波浪将指引我们穿过另一天曙光
2005-07-11 13:32
ysfabm
Rank: 1
等 级:新手上路
威 望:1
帖 子:274
专家分:0
注 册:2004-11-9
收藏
得分:0 
我试了试,还不错!

精诚所至,
       金石为开!
      PLM技术社区: [url=http://www.]www.[/url] 最专业的PLM技术讨论社区。
2005-07-11 13:49
牛虻
Rank: 1
等 级:新手上路
威 望:1
帖 子:472
专家分:0
注 册:2004-10-1
收藏
得分:0 
没有做容错处理,例如:添加英语成绩时候不小心输入了一个字符的话,该次输入也echo"成功"

[此贴子已经被作者于2005-7-12 17:14:03编辑过]



土冒
2005-07-12 17:11
快速回复:简单的成绩管理系统,课程设计时做的,非常非常简陋
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022526 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved