C语言课程设计:学生学籍管理系统。有谁有代码给我做个参考吗?谢谢了,C语言和C++的都可以。

C语言课程设计:学生学籍管理系统。有谁有代码给我做个参考吗?谢谢了,C语言和C++的都可以。,第1张

#include<stdio.h>

#include<string.h>

#include<stdlib.h>

typedef struct stud //学生信息结构

{

long num

char name[20]

float score

}Stud

typedef struct node

{

Stud student

struct node *next

}Node

Node *head=NULL

void read(void)

void inser(long b)

void print()

void find(long b)

void searchname(char *s)

Node * del(long n)

void sort(int flag)

void menu()

void main()

{

char choose

int flag=1

while (flag)

{

menu()//调用功能菜单函数,显示菜单项。

printf(" 请选择:")

choose=getchar()

switch(choose)

{ 1

case '1': read()//调用建立链表的函数;输出链表信息;

print()

printf("\nPress any key Continue ")

//getchar()

getchar()

break

case '2': //调用按学号查找学生信息的函数;并输出查找结果信息;

long c

printf("input the number you want to find:")

scanf("%ld",&c)

find(c)

printf("\nPress any key Continue.")

getchar()

break

case '3':

//调用按姓名查找学生信息的函数;并输出查找结果信息;

char s[20]

printf("input the name you want to find:")

scanf("%s",s)

searchname(s)

printf("\n Press any key Continue.")

getchar()

getchar()

break

case '4':

//调用根据学号删除某个学生信息的函数;并输出删除后的链表信息;

Node *h

long n

printf("input the number you want to delete:")

scanf("%ld",&n)

h=del(n)

if(h==NULL) printf("No find the student \n")

else print()

printf("\n Press any key Continue.")

getchar()

getchar()

break

case '5':

//调用插入新的学生信息的函数;并输出插入后的链表信息;

long a

printf("input the number for the new:\n")

scanf("%ld",&a)

inser(a)2

print()

printf("\n Press any key Continue.")

getchar()

getchar()

break

case '6':

//调用按分数降序排序输出的函数;并输出排序后的链表信息;

sort(1)

print()

sort(0)

printf("\nPress any key Continue.")

getchar()

getchar()

break

case '0':

//结束程序运行!

flag=0

printf("\n *** The End! ***\n")

break

default: printf("\n Wrong Selection !(选择错误,重选)\n")

getchar()

}

}

}

void menu() //综合作业功能菜单

{

printf(" \n 学 生 信 息 管 理 系 统\n")

printf(" \n 菜 单\n\n")

printf(" \n 1. 建 立 链 表 并 显 示 \n")

printf(" \n 2. 查 找 某 学 号 的 学 生 信 息 \n")

printf(" \n 3. 查 找 某 姓 名 的 学 生 信 息 \n")

printf(" \n 4. 删 除 某 个 学 号 的 学 生\n")

printf(" \n 5. 插 入 新 的 学 生 信 息 \n")

printf(" \n 6. 按 分 数 降 序 排 序 输 出 \n")

printf(" \n 0. 退 出\n\n")

}

void read(void)

{

long a

printf("input the number:")

scanf("%ld",&a)

while(a>0){ 3

inser(a)

printf("input the number:")

scanf("%ld",&a)

}

}

void inser(long b)

{

Node *last,*current,*p

current=head

while(current!=NULL&&b>current->student.num){

last=current

current=current->next

}

if(current==NULL||b<current->student.num){

printf("input the name,score:")

p=(Node *)malloc(sizeof(Node))

p->student.num=b

scanf("%s%f",p->student.name,&p->student.score)

p->next=NULL

if(current==head){

p->next=head

head=p

}

else{

p->next=current

last->next=p

}

}

else if(b==current->student.num)

printf("error input a different number:")

}

void print()

{

Node *p=head

printf("学号 姓名 成绩:\n")

while(p!=NULL){

printf("%ld %s %f\n",p->student.num,p->student.name,p->student.score)

p=p->next

} 4

printf("\n")

}

void find(long b)

{

Node *p=head

while(p!=NULL&&b!=p->student.num)

p=p->next

if(!p) printf("No found\n")

else {

printf("学号 姓名 成绩\n")

printf("%ld %s %f\n",p->student.num,p->student.name,p->student.score)

}

}

void searchname(char *s)

{

Node *p=head

int flag=0

printf("学号 姓名 成绩:\n")

while(p!=NULL)

{

if(strcmp(p->student.name,s)==0)

{

printf("%ld %s %f\n",p->student.num,p->student.name,p->student.score)

flag=1

p=p->next

continue

}

else p=p->next

}

if(!flag) printf("No find")

}

Node * del(long n)

{

Node *p=head,*last

while(p->student.num!=n){

last=p

p=p->next

}

if(p==NULL) return p

else if(p==head) head=p->next

else last->next=p->next5

return head

}

void sort(int flag)

{

/*flag==1 按分数排序 else 按学号排序*/

Node *p1,*p2,*k

float t1

long t2

char s[20]

for(p1=headp1->nextp1=p1->next)

{

k=p1

for(p2=p1->nextp2p2=p2->next)

if(flag==1&&k->student.score<p2->student.score||!flag&&k->student.num>p2->student.num)

k=p2

if(k!=p1){

t1=p1->student.score

p1->student.score=k->student.score

k->student.score=t1

t2=p1->student.num

p1->student.num=k->student.num

k->student.num=t2

strcpy(s,p1->student.name)

strcpy(p1->student.name,k->student.name)

strcpy(k->student.name,s)

}

}

}

给你看看

一. 应用实例的分析与开发

---- 我们以学籍管理系统为背景,基于Windows DNA的思想,开发了一套应用系统。在该系统中,有关教务学籍的事务逻辑都是由定制COM组件来处理的,动态Web页面通过ASP脚本调用这些组件。系统在开发速度和软件质量等方面都优于不用COM组件而仅用ASP脚本的方案。为说明问题,我们通过一个定制组件和ASP脚本的主要代码简单介绍局部功能的实现过程。

---- 在displayscore.asp页面中接受、辨别用户的查询请求,做出不同的查询处理。当客户的身份为教师或教务时,可以查询所有学生的成绩;当客户的身份为学生时,只能查询该生本人的成绩。

---- 定制COM组件Score.dll进行查询处理。首先设计该组件的接口,为组件设置四个属性: Subj(课程)、Term(课程所属学期)、Class(查询的班级)和Stu_No(查询学生的学号);定义两个方法:RequeryScores和RequeryAllScores,分别对教师、教务部门和学生的请求做出相应的处理,并将查询结果集返回给用户。

---- 以下是实现该组件Score.dll的部分关键代码。从中我们可以看到组件的接口是如何实现的:

Option Explicit

Private m_StuNo As Variant

Private m_Subj As String

Private m_Term As String

Private m_Class As String

' 设置属性为可写入的

Public Property Let StuNo(ByVal vNewValue As Variant)

m_StuNo = vNewValue

End Property

Public Property Let Subj(ByVal vNewValue As Variant)

m_Subj = vNewValue

End Property

......

' 学生查询成绩请求处理

Public Function RequeryScores() As Object

Dim objContext As MTxAS.ObjectContext

Set objContext = GetObjectContext()

' 建立事务性组件

Dim ObjConn As ADODB.Connection

' 利用ADO访问数据库

Dim ObjRecordset As ADODB.Recordset

Set ObjConn = New ADODB.Connection

ObjConn.Open "xia", "sa", ""

Set ObjRecordset = New ADODB.Recordset

Dim query As String

' 根据查询要求(查询所有课程、查询特定学期的所有课程、

查询指定课程、查询特定学期的某一课程)进行不同的查询 *** 作

If (m_Subj = "all" And m_Term <>"all") Then

query="select Client_Name,Client.Client_No,Courses.subject,

stu_score.score,stu_score.term,sub_type"

query = query &" from client,stu_score,courses"

query=query&"where client.client_no=stu_score.client_no

and stu_score.subject=courses.subject

and courses.term=stu_score.term

and courses.term='" &m_Term &"'

and Client.Client_no='" &m_StuNo &"'"

End If

......

ObjRecordset.Open query, ObjConn

' 进行数据库查询

ObjContext.SetComplte

' 若事务成功完成,则提交该事务

RequeryScoresExit:

Set RequeryScores = ObjRecordset

' 返回查询结果集

Exit Function

RequeryScoresErr:

Set RequeryScores=Nothing

' 事务失败处理

End Function

' 教师、教务查询成绩请求处理

Public Function RequeryAllScores() As Object

......

End Function

---- 在ASP页面displayscore.asp中引用组件,ASP代码如下(其中加粗的部分便是对该组件的调用):

<%@ LANGUAGE="VBSCRIPT" % >

<HTML >

<HEAD >

<META NAME="GENERATOR" Content="Microsoft

Visual InterDev 1.0" >

<META HTTP-EQUIV="Content-Type"

content="text/htmlcharset=gb_2312-80" >

<TITLE >Show To Teacher</TITLE >

</HEAD >

<BODY background="images/bk.GIF" >

<%

dim objResult

set objResult=Server.CreateObject("Display.Score")

dim Term,Subject

Term=Cstr(Request.Form("Term"))

Subject=Cstr(Request.Form("Subject"))

objResult.term=Request.Form("term")

objResult.Subj=RequestForm("Subject")

objresult.class=Request.Form("Class")

dim Scores

set Scores=objResult.RequeryAllScores

% >

' 以下代码为显示处理的结果

<div align="center" ><center >

......

<table border="0" cellpadding="0"

cellspacing="1" width="100" ><tr >

<%For I = 0 To Scores.Fields.Count - 1% >

<td bgcolor="#004080" >

<strong ><font color="#FFFFFF" ><small >  

<%=scores(I).Name% ></font ></strong > </td >

<%NEXT

Do While (Not Scores.EOF)% >

</tr ><tr >

<% For I = 0 To Scores.Fields.Count - 1% >

<td bgcolor="#ACE8F9" ><p align="center" >

  <%= Scores(I).Value% ></td >

<%Next

Scores.MoveNext% ></tr >

<%Loop% >

<%Scores.close

' 关闭数据库连接

set Scores=Nothing

set objResult=Nothing % >

' 释放对象

</table ></center ></div >

</BODY >

</HTML >

---- 可以想象,如果仅使用ASP脚本进行业务处理就会使ASP页面中代码十分臃肿、晦涩。而使用组件的方案也较单纯的ASP脚本执行速度速度快。并且可以将整个查询处理作为一个事务,保证数据库信息的安全、完整。将该组件在MTS中注册,又可避免多用户访问该主页时可能造成的网络拥塞。实际应用中,学生和教师的使用权限是不同的。在学生查询成绩的页面中,可重用该组件,只是调用其不同的接口而已。仅使用ASP脚本进行业务处理,则需重新编写与displayscore.asp类似的、同样烦琐的代码。在开发过程中,不同的开发人员可各尽所能,同时进行组件和ASP页面的设计,缩短了软件开发周期。

---- 以下两图显示的是教师(教务)查询成绩和显示查询结果的页面:

二. 开发过程中辅助工具的使用

---- 传统的软件工程进行的需求分析、数据库设计等都是人们“纯手工”完成的,缺乏严谨性和规范性。而在以组件为中心的系统分析和软件开发过程中,应力争使用有效的计算机辅助工具,以适应快速建模和组件方法新形势的需要,提高分析的质量及精度。

---- 有很多辅助工具可以利用。由于以组件为中心的系统分析过程仍保留着传统软件工程方法的脉络痕迹,北大青鸟的CASE工具对传统的软件工程方法比较有效,我们采用了这一工具。在数据库建模方面,我们选用了SYBASE 公司的S-Designer,可将数据库概念模型自动转化为物理模型。

---- 1. 利用青鸟CASE工具编写需求分析文档

---- 长久以来,人们已习惯于“纯手工”地进行需求分析。开发人员对现有系统和用户要求进行调查后,需要设计系统的数据流图(DFD图),编写小说明,设计系统的结构图(SC图)。但这种分析方法是不严谨的,由于种种原因,可能会发生加工、数据流、文件的语法定义错误;数据流图上下各层不一致;数据流图分解后的数据不平衡,或文件等重名及文档不完备等各种问题,影响了我们对用户需求的分析和理解,防碍了今后的工作。尤其是对组件的分析失当,后果不堪设想。

---- 青鸟CASE工具提供的即是一套支持软件工程中采用传统的结构化方法进行需求分析、软件设计的工具。由工具生成的每个文件即一个项目,每个项目均包括数据流图和模块结构图两部分:

数据流图部分辅助系统分析员完成对软件系统的需求分析、建立目标系统的需求模型、生成一份正确、完整的关于目标系统的说明文档;同时,提供对需求文档的查询、列表、分片、影响范围等分析功能,辅助软件设计人员对需求分析的结果文档进行深入、细致的分析和理解,以利于软件设计工作。

模块结构图部分辅助程序设计人员在需求分析阶段完成后对软件系统进行设计,支持模块的逐层细化,建立系统的软件体系结构,最后得到一份正确、完整的软件设计文档。同时,提供对设计文档进行查询、列表、分片、影响范围等分析功能,完成对设计的结果文档进行深入、细致的分析理解,以利于软件开发及维护工作。在SC图中组件的规划方案已见端倪,继续细化将得出每个组件的概要设计方案。

---- 在教务系统的实例中,利用青鸟CASE工具生成的DFD图和SC图如下图所示:

---- 系统1层DFD图 系统0层SC图

---- 2. 利用S-Designer进行数据库设计

---- 当完成系统的详细设计后,接下来便是数据库设计。数据库设计在整个软件工程中占有举足轻重的地位。数据库设计不合理,数据得不到合理、有效的存储,数据存在潜在的不一致性、不完整性或有大量冗余,都会降低系统性能,甚至使系统崩溃。

---- 手工的数据库设计完全依赖于设计者的设计水平。设计者首先必须根据实际需要建立若干个逻辑上存在的数据库表,并使其满足第三范式;而后根据它们之间的联系建立特定数据库表将其联系起来。这是一件相当烦琐的事。数据库设计者既要进行数据库的逻辑设计,又要将逻辑模型转成物理模型,而且设计出的数据库不一定能满足第三范式。合理的库表结构决定了访库组件接口的设计质量,所以原先数据库设计方式不适用于以组件对象为中心的软工设计。

---- 在教务系统的实例中,S-Designer使数据库设计变得轻松、简单起来。设计者只须根据现实需要,设计出数据库的E-R图,S-Designer会将逻辑模型转化为物理模型,为数据库表间的联系建立新表,指明表的主码、外码,并自动对数据库表进行一致性、冗余性、完整性检查,使数据库表满足第三范式。

---- 例:可首先设计出数据库表课程(Courses)和学生(Client)的逻辑模型:

---- 接下来,为表Courses和Client间建立联系。由S-Designer自动生成的物理模型,如下图所示,它们为访库组件的接口设计提供了准确的依据。

---- 可以相信,随着软件工程学的进一步成熟,将出现更多的计算机辅助工具,帮助软件开发人员构建出更完善的应用系统。许多辅助软件工具可以完成相似的工作,到底选用何种辅助工具取决于这些工具的性能以及使用者的习惯。

---- 以组件对象为中心的动态Web方法和DNA思想并不高深莫测,开发技术也愈加规范化。应当说,这套方法更适合客观信息结构的现实,也更接近于人们的思维方式,其技术有如行云流水般自然,很适合在中小型企业环境中推广和普及。

你先看看这个,你这些功能是需要定做的,参考一下我的论文再说。

学生学籍管理系统(VB+ACCESS)+代码

学籍管理工作在正常的情况下需对大量的数据进行处理,它们包括,新生入学、班级设置、班级编排、新生学号设置、学生基本档案输入、学籍变动、每学期末的升级处理、学生生花名册打印等。如果由人工去处理这些数据需要花费大量的时间、人力、物力。学籍管理系统,是在总结以上管理方法的基础上并结合用户的需求对学籍的各种数据进行了有针对性的开发,充分利用Visual Basic具有强大的数据库管理功能及在应用程序开发上高效、灵活的特点,创建了各个过程,目标设计、系统开发背景、开发和运行环境选择、系统功能分析、系统功能模块设计、数据库需求分析、数据库概念结构设计、数据库逻辑结构设计、数据库结构实现、各个功能模块的创建、系统的编译和发行等进行了详细描述。学籍管理系统设计突出了信息管理系统完整实用的开发方法,系统的最大特点是突出了实用性和实效性,紧密的结合了用户的使用要求, *** 作方便,有一人进行管理就可以完成大量的学籍管理工作,例如:新生入学后,由计算机根据报名录入的情况,统计新生人数,按用户要求进行自动编排班级(可按入学成绩或报名顺序两方式),然后按规定自动产生学号;当一学期结束后,系统能自动完成学生的升级处理,还有许多先进的功能,限于篇幅就不一一介绍了;另外,本系统还有一大优点,就是采用客户机/服务器结构体系设计,程序利用ODBC开放式数据源访问数据,即可在单机上运行,又可在网络环境下运行,应用程序不用改动,只需将数据库升级到网络上就行了。

关键词:学籍,新生,排班,升级,变动,数据源

目 录

第一章 前 言•••••••••••••••••••••••••••••••••••••••••••••••••••5

第二章 系统开发工具和数据库简介•••••••••••••••••••••••••••••••••••••6

2.1Visual Basic 6.0 概述••••••••••••••••••••••••••••••••••••••••••6

2.2 数据库基础知识与Access的应用•••••••••••••••••••••••••••••••••8

第三章 数据库应用程序开发步骤•••••••••••••••••••••••••••••••••••••••10

3.1 数据库应用程序的基本成组成•••••••••••••••••••••••••••••••••••••10

3.2 数据库应用程序的开发步骤••••••••••••••••••••••••••••••••••••••10

3.3 学籍管理系统数据库的设计思想••••••••••••••••••••••••••••••••••11

第四章 学籍管理系统功能的具体实现•••••••••••••••••••••••••••••••••••13

第五章 学籍管理系统的使用说明••••••••••••••••••••••••••••••16

第六章 学籍管理系统的运行环境及系统设置•••••••••••••••••••20

6.1 系统软件安装方法••••••••••••••••••••••••••••••••••••••••••20

6.2 运行环境及数据源设置•••••••••••••••••••••••••••••••••••••21

第七章 结束语•••••••••••••••••••••••••••••••••••••••••••••••••22

参考资料:http://lunwenwuyou.com/Papers/Other_papers/Computer/191144.html


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/sjk/6422502.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-03-21
下一篇2023-03-21

发表评论

登录后才能评论

评论列表(0条)

    保存